1.对于不可对象来说(整型,字符串,元组):
deepcopy与copy的作用一样,得到的两个变量的地址一样,并且和“=”的作用相同。
In [88]: a="a"
In [89]: b=a
In [90]: c=copy.copy(a)
In [91]: d=copy.deepcopy(a)
In [94]: id(a)
Out[94]: 2222052779824
In [95]: id(b)
Out[95]: 2222052779824
In [96]: id(c)
Out[96]: 2222052779824
In [97]: id(d)
Out[97]: 2222052779824
2.对于可变对象(列表,字典)来说:
-
浅拷贝(两种情况):
-
复制的对象中没有复杂的子对象,如[1,2,3],原来的值并不影响浅复制的值,浅复制的值也不影响原来的值,两个对象的地址不一样
In [113]: a=[1] In [114]: b=copy.copy(a) In [115]: id(a) Out[115]: 2222126222152 In [116]: id(b) Out[116]: 2222126488904
-
2. 复制的对象中有 复杂 子对象 (例如列表中的一个子元素是一个列表), 改变原 来的值 中的复杂子对象的值 ,会影响浅复制的值
In [121]: id(a)
Out[121]: 2222126316616
In [122]: id(b)
Out[122]: 2222126020168
In [123]: a[2][1]=6
In [124]: b
Out[124]: [1, 2, [3, 6]]
2.深拷贝,完全复制独立,包括内层列表和字典
In [131]: a=[1,2,[3,4]]
In [132]: b=copy.deepcopy(a)
In [133]: a[2][0]=6
In [134]: b
Out[134]: [1, 2, [3, 4]]
3.“=”的作用,无论是[1,2],还是[1,2,[3,4]]形式,它的作用都是两个变量的地址一样,司改一个变量的值,另一个变量的值也会跟着变化:
In [135]: a=[1,2]
In [136]: b=a
In [137]: id(a)
Out[137]: 2222126044680
In [138]: id(b)
Out[138]: 2222126044680
In [139]: a[0]=2
In [140]: b
Out[140]: [2, 2]
In [141]: a=[1,2,[2,3]]
In [142]: b=a
In [143]: a[2][0]=6
In [144]: b
Out[144]: [1, 2, [6, 3]]
In [145]: id(b)
Out[145]: 2222125880200
In [146]: id(a)
Out[146]: 2222125880200