当一个变量=xxx的时候,约定为: 指向地址的过程
如果copy.copy()拷贝的是元组,那么它不会进行浅拷贝,仅仅是指向
因为元组是不可变数据类型,那么意味着数据一定不能修改,因此用copy.copy的
时候它会自动判断,是指向。
如果,用copy.copy() copy.deepcopy()对一个全部是不可变类型的数据进行
数据拷贝,那么它们的结果相同,都是指向。
如果拷贝的是一个拥有可变类型的数据,那么deepcopy依然是深拷贝,而copy.copy还是指向。
浅拷贝:copy.copy()
深拷贝:copy.deepcopy()
In [38]: import copy
In [39]: a = [11,22]
In [40]: b = [33,44]
In [41]: c = [a,b]
In [42]: c
Out[42]: [[11, 22], [33, 44]]
In [43]: d = copy.copy(c) #d浅拷贝
In [44]: id(c)
Out[44]: 140233732341960
In [45]: id(d)
Out[45]: 140233713050888 #列表为可变数据类型,浅拷贝创建新地址,里面的列表仍然为指向
In [46]: id(c[0])
Out[46]: 140233732292488
In [47]: id(d[0])
Out[47]: 140233732292488 #仅仅是指向
In [48]: id(a)
Out[48]: 140233732292488
In [49]: e = copy.deepcopy(c) #e为深拷贝
In [50]: id(e)
Out[50]: 140233732321800 #深拷贝,创建一个新地址并且指向
In [51]: id(c)
Out[51]: 140233732341960
In [52]: id(c[1])
Out[52]: 140233731307720
In [53]: id(e[1])
Out[53]: 140233713173832
In [54]: id(d[1])
Out[54]: 140233731307720 #内部也创建新地址
In [55]: a = [11,22] #a,b均为列表
In [56]: b = [33,44]
In [57]: c = [a,b] #c为列表嵌套列表
In [58]: d = copy.copy(c) #d浅拷贝
In [59]: e = copy.deepcopy(c) #e深拷贝
In [60]: id(c)
Out[60]: 140233732324104
In [61]: id(d)
Out[61]: 140233740633608
In [62]: id(e)
Out[62]: 140233732090888
In [63]: c.append([55,66]) #给c添加新列表
In [64]: c
Out[64]: [[11, 22], [33, 44], [55, 66]]
In [65]: d
Out[65]: [[11, 22], [33, 44]] #de不变
In [66]: e
Out[66]: [[11, 22], [33, 44]]
In [73]: a = [11,22] #a,b是列表
In [74]: b = [33,44]
In [75]: c = (a,b) #c是元组,不可变数据类型
In [76]: c
Out[76]: ([11, 22], [33, 44])
In [77]: d = copy.copy(c) #d为浅拷贝
In [78]: id(c)
Out[78]: 140233732322440
In [79]: id(d)
Out[79]: 140233732322440 #d仅仅为指向
In [80]: e = copy.deepcopy(c) #e为深拷贝
In [81]: id(e)
Out[81]: 140233713145672 #e创建了新地址
In [82]: id(c)
Out[82]: 140233732322440
In [83]: id(c[1])
Out[83]: 140233713122504
In [84]: id(e[1])
Out[84]: 140233731173640 #e中索引值为1的元素新建地址
In [85]: id(d[1])
Out[85]: 140233713122504 #d中索引值为1的元素仍然为指向
In [86]: a.append(55)
In [87]: c
Out[87]: ([11, 22, 55], [33, 44])
In [88]: e
Out[88]: ([11, 22], [33, 44])
[] :
列表
[[],[]]
浅拷贝 里面的不变 外面的变
深拷贝 里面的变 外面的变
元组
(,) 浅拷贝 深拷贝 不变
([],[]) 浅拷贝 外面不变 里面不变
深拷贝 外面的变 里面的变