|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 方糖 于 2017-9-28 07:05 编辑 list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]
list2 = list1.copy()
list1[1][2] = ['小鱿鱼']
print(list1, list2, sep='\n')
list1[3] = 'test'
print(list1, list2, sep='\n')
copy属于浅拷贝,查了下浅拷贝的定义:
1、赋值:简单地拷贝对象的引用,两个对象的id相同。
2、浅拷贝:创建一个新的组合对象,这个新对象与原对象共享内存中的子对象。
3、深拷贝:创建一个新的组合对象,同时递归地拷贝所有子对象,新的组合对象与原对象没有任何关联。虽然实际上会共享不可变的子对象,但不影响它们的相互独立性。
因为个人诸多混乱的实例所以有点没明白,仔细的读了深拷贝后,已经懂了,这个删帖是要申请么?各位看帖的鱼油原谅我
为了最佳答案,我来举实例对比赋值、浅拷贝和深拷贝的区别。
赋值:简单的拷贝对象的引言,两个对象的id相同
例如
>>> list1 = ['小甲鱼',3,[5,7]]
>>> list2 = list1 #赋值操作
>>> print(id(list1),id(list2)) #打印两个变量的id值
51724616 51724616 #id值相同
>>> list2.append(9) #list2列表增加一个元素9
>>> print(list1,list2)
['小甲鱼', 3, [5, 7], 9] ['小甲鱼', 3, [5, 7], 9] #两者元素值完全相同
浅拷贝:穿件一个新的组合对象,这个新对象和原对象共享内存中的子对象
>>> list3 = list1.copy() #list3是list1的浅拷贝
>>> list3.append(11) #list3新增加一个元素11
>>> print(list1,list3)
['小甲鱼', 3, [5, 7], 9] ['小甲鱼', 3, [5, 7], 9, 11] #list1中不会增加新元素
>>> print(id(list1),id(list3)) #显示两个列表id
51724616 52341064 #浅拷贝id不同
>>> list3[2].append(8) # list3列表内的子列表增加一个元素8
>>> print(list1,list3)
['小甲鱼', 3, [5, 7, 8], 9] ['小甲鱼', 3, [5, 7, 8], 9, 11] #两个列表中的子列表都多了元素8
>>> print([id(eid) for eid in list3]) #打印列表3内元素id
[52362288, 495812864, 52056584, 495813056, 495813120]
>>> print([id(eid) for eid in list1]) #打印列表1内元素id
[52362288, 495812864, 52056584, 495813056] #通过对比发现元素id一致
>>> list3[0] = '小牛' #将列表3内的第一个元素更改为'小牛'
>>> print([id(eid) for eid in list3])
[52377976, 495812864, 52056584, 495813056, 495813120] #由于字符串属于不可变类型,重新给了新id
>>> print(list1,list3)
['小甲鱼', 3, [5, 7, 8], 9] ['小牛', 3, [5, 7, 8], 9, 11] #导致两者结果不一致
>>> import copy #引入拷贝模块
>>> list4 = copy.deepcopy(list1) #深拷贝
>>> print([id(eid) for eid in list1])
[52362288, 495812864, 52056584, 495813056]
>>> print([id(eid) for eid in list3])
[52377976, 495812864, 52056584, 495813056, 495813120]
>>> print([id(eid) for eid in list4])
[52362288, 495812864, 51731656, 495813056] 对比发现子列表地址不一致
>>> list4[2].append(10)
>>> print(list1,list4)
['小甲鱼', 3, [5, 7, 8], 9] ['小甲鱼', 3, [5, 7, 8, 10], 9] #对比发现子列表结果不一致了
|
-
|