对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用不当,可能产生意外的结果.
id
什么是id
?一个对象的id
值在CPython
解释器里就代表它在内存中的`地址
1 2 3 4 5 6 7 8 9 10 11 12
| import copy a=[1,2,3] b=a
print(id(a))
print(id(b))
print(id(a)==id(b))
b[0]=222222 print(a,b)
|
4449594888
4449594888
True
[222222, 2, 3] [222222, 2, 3]
浅拷贝
当使用浅拷贝时,python 只是拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已
1 2 3 4 5 6 7 8 9 10 11
| import copy
a=[1,2,3] c=copy.copy(a) print(id(c))
print(id(a)==id(c))
c[1]=22222 print(a,c)
|
4449594440
False
[1, 2, 3] [1, 22222, 3]
深拷贝
deepcopy
对外围和内部元素都进行了拷贝对象本身,而不是对象的引用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
a=[1,2,[3,4]] d=copy.copy(a) >>> id(a)==id(d) False >>> id(a[2])==id(d[2]) True >>> a[2][0]=3333 >>> d [1, 2, [3333, 4]]
>>> e=copy.deepcopy(a) >>> a[2][0]=333 >>> e [1, 2, [3333, 4]] >>>
|
Reference
Checking if Disqus is accessible...