上面图表示浅复制和深复制,针对顶层对象来说,赋值为引用,浅复制和深复制都是复制一个新的对象。
针对子对象来说,浅复制为引用、深复制就是复制两个一样的。
1、赋值
A= [ 1,2,3, [ 'a','b '] ]
B=A
则 id ( A ) = id ( B )【因为A、B同时指向同一个对象】)
2、浅复制:copy()函数
copy只是复制了顶层对象,嵌套对象为引用。
比如: A= [ 1,2,3, [ 'a','b '] ]
B=A.copy()
此时A和B的输出是一样的。
A[1]=100,
B=[ 1,2,3, [ 'a','b '] ] (【B顶层对象没变】)
id (A) ≠不等于 id (B)
此时A和B输出不一样。
A[3][0]='c'
B=[ 1,2,3, [ 'c','b '] ] (【B嵌套对象改变】)
id ( A[3] ) = id (B [3] )
此时A和B输出一样。
3、深复制:需要引用copy包中的deepcopy方法。
深复制就是将顶层对象和子对象全部赋值。
from copy import deepcopy
B=deepcopy(A)
id (B) 不等于 id (A)
对A中的对象随意修改,B对象不变。