- 我的理解:
- 浅拷贝:列表嵌套列表,子列表会变,父列表不会变
- 深拷贝:都不变
- 赋值不是拷贝
l1 = [1,2,3,4,[5,6,7,]] l2 = l1 # 赋值 赋值不是拷贝 多个变量指向同一个内存地址 一个变都变 l1.append(8) print(l1) print(l2) ''' 输出结果 [1, 2, 3, 4, [5, 6, 7], 8] [1, 2, 3, 4, [5, 6, 7], 8] ''' # 个人见解: # 赋值都指向同一个内存地址,值相同,值发生变化都变化
- 只拷贝第一层
- 浅拷贝会创建一个新的列表(容器)
- 新创建的列表中的元素和原列表的元素用的是同一个内存空间
l1 = [1,2,3,4,[4,5,6]] l2 = l1[:] # 浅拷贝 l2 = l1.copy() # 浅拷贝 -- 只拷贝第一层 print(id(l1[0])) print(id(l2[0])) ''' 输出结果 4438958224 4438958224 很明显内存地址相同 ''' # 个人见解: # l1中的[4,5,6]会变,外层不会变
不可变的数据类型和原列表指向同一个空间
可变数据会创建一个新的空间
import copy li = [1,2,3,4,5,[6,7,8]] l2 = copy.deepcopy(li) li[-1].append(678) print(li) print(l2) ''' 输出结果 [1, 2, 3, 4, 5, [6, 7, 8, 678]] [1, 2, 3, 4, 5, [6, 7, 8]] ''' import copy li = [3,4,5,[1,2,3,4],6,7,8,{"k":'v'}] l2 = copy.deepcopy(li) li[-1]['k'] = "a" print(li) print(l2) [3, 4, 5, [1, 2, 3, 4], 6, 7, 8, {'k': 'a'}] [3, 4, 5, [1, 2, 3, 4], 6, 7, 8, {'k': 'v'}] ''' 个人见解: 深拷贝都不变 ''' dic = {} # "v":4 li = [] #[{"v":0},{"v":1},{"v":2},{"v":3},{"v":4}] for i in range(0,5): dic["v"] = i li.append(dic) print(li) ''' 输出结果 [{'v': 4}, {'v': 4}, {'v': 4}, {'v': 4}, {'v': 4}] ''' - 1.面试
- 2.不让修改原数据的时候,使用
电脑教学 鼠标写字工具
# 看代码写结果 l1 = [1,2,3,4,[5,6,7,]] l2 = l1 # 赋值 赋值不是拷贝 l1.append(8) print(l1) print(l2) ''' 结果: ''' l1 = [1,2,3,4,[4,5,6]] l2 = l1[:] # 浅拷贝 l2 = l1.copy() # 浅拷贝 -- 只拷贝第一层 print(id(l1[0])) print(id(l2[0])) ''' 结果 ''' l1 = [1,2,3,4] l2 = l1.copy() print(l1) print(id(l1)) print(id(l2)) print(id(l1[0])) print(id(l2[0])) ''' 结果 ''' li = [1,2,32,[3,4,5]] l2 = li.copy() li.append(8) print(l2) print(li) li[-1].append(8) print(l2) ''' 结果 ''' l1 = [1,2,3,(1,2,3)] l2 = l1.copy() l2[-1] = 6 print(l1) print(l2) ''' 结果 ''' l1 = [1,2,3,4,[5,6,7,]] l2 = l1.copy() l1[-1].append(8) print(l2) ''' 结果 ''' li = [1,2,3,4,] l2 = li # 赋值 两个变量指向了一个列表内存地址 li.append(9) print(l2) ''' 结果 ''' l1 = [1,2,3,4,5,] l2 = l1.copy() l1.append(8) print(l2) print(l1) ''' 结果 ''' l1 = [1,2,3,[4,5,6]] l2 = l1.copy() l2[-1] = 77 print(l1) print(l2) ''' 结果 ''' import copy li = [1,2,3,4,5,[6,7,8]] l2 = copy.deepcopy(li) print(li) # print(id(li)) print(id(li[-1])) print(l2) # print(id(l2)) print(id(l2[-1])) ''' 结果 ''' import copy li = [1,2,3,4,5,[6,7,8]] l2 = copy.deepcopy(li) li[-1].append(678) print(l2) ''' 结果 ''' import copy li = [3,4,5,[1,2,3,4],6,7,8,{"k":'v'}] l2 = copy.deepcopy(li) li[-1]['k'] = "a" print(li) print(l2) ''' 结果 ''' dic = {} # "v":4 li = [] #[{"v":0},{"v":1},{"v":2},{"v":3},{"v":4}] for i in range(0,5): dic["v"] = i li.append(dic) print(li) ''' 结果 '''