copy就是复制一份,也就是所谓的抄一份.深浅拷贝其实就是完全复制一份,和部分复制一份的意思.
1. 先看看赋值运算
l1 = [1,2,3,['jason', 'egon']] l2 = l1 l1[0] = 111 print(l1) print(l2) # [111, 2, 3, ['jason', 'egon']] # [111, 2, 3, ['jason', 'egon']] l1[3][0] = 'kevin' print(l1) # [111, 2, 3, ['kevin', 'egon']] print(l2) # [111, 2, 3, ['kevin', 'egon']]
对于赋值运算来说,l1和l2指向的是同一个地址,所以他们是完全一样的,再举个例子,比如张三李四合租在一起,那么对客厅来说,他们是公用的,张三可以用, 李四可以用,但有一天张三把客厅的电视换成投影了,那么李四想在客厅看电视,而电视没有了,而是投影,l1,l2指向的是同一张表,任何一个变量对列表进行修改,剩下那个变量在使用列表之后,这个列表就是发生改变之后的列表.
2. 深浅拷贝
浅拷贝: 在内存中只额外创建第一层数据
>>> n1 ={'k1':'v1','k2':'v2','k3':['liuyao','job']}>>> n2 =copy.copy(n1)>>> id(n1)140120750337544>>> id(n2)140120750371208>>> id(n1['k3'][0])140120778934064>>> id(n2['k3'][0])140120778934064

深拷贝: 在内存中将所有的数据重新创建一份(排除最后一层,python内部对字符串和数字的优化)
>>> import copy >>> n1 = {'k1':'v1','k2':'v2','k3':['liuyao','job']} >>> n2 = copy.deepcopy(n1) >>> id(n1) 140120750514696 >>> id(n2) 140120750514888 >>> id(n1['k3']) 140120750335688 >>> id(n2['k3']) 140120750335752 >>> id(n2['k3'][0]) 140120778934064 >>> id(n1['k3'][0]) 140120778934064

来源:博客园
作者:凌晨小雨
链接:https://www.cnblogs.com/panshao51km-cn/p/11546502.html