| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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]     #对比发现子列表结果不一致了 
 
 
 |   
- 
 
 
 
 
 
 
 
 |