赋值(=):其实就是对象的引用(别名)。
浅拷贝(copy.copy):拷贝父对象,不会拷贝对象的内部的子对象。
深拷贝(copy.deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
解析
1、**b = a: **赋值引用,a 和 b 都指向同一个对象。
2、b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。
b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。
神奇的多变量赋值,以上概念不包含多变量赋值
a1 ,a2 = 123123,123123
a3 ,a4 = '123123','123123'
print('多变量赋值-int:',a1==a2,a1 is a2,a2 is a1,id(a1),id(a2))
print('多变量赋值-str:',a3==a4,a3 is a4,a4 is a3,id(a3),id(a4))
# 多变量赋值-int: True False False 2174409713520 2174409713488
# 多变量赋值-str: True True True 2174393548392 2174393548392
a5,a6=[1,2,3],[1,2,3]
a7,a8=(1,2,3),(1,2,3)
print('多变量赋值-list:',a5==a6,a5 is a6,a6 is a5,id(a5),id(a6))
print('多变量赋值-tuple:',a7==a8,a7 is a8,a8 is a7,id(a7),id(a8))
# 多变量赋值-list: True False False 2174361625096 2174361625160
# 多变量赋值-tuple: True False False 2174409619496 2174409619352
a9,a10=[1,2,a5],[1,2,a5]
a11,a12=(1,2,a5),(1,2,a5)
print('多变量赋值-list>list:',a9==a10,a9 is a10,a10 is a9,id(a9),id(a10))
print('多变量赋值-tuple>list:',a11==a12,a11 is a12,a12 is a11,id(a11),id(a12))
# 多变量赋值-list>list: True False False 2174409632712 2174409739592
# 多变量赋值-tuple>list: True False False 2174409619280 2174409619208
a13,a14=[1,2,a7],[1,2,a7]
a15,a16=(1,2,a7),(1,2,a7)
print('多变量赋值-list>tuple:',a13==a14,a13 is a14,a14 is a13,id(a13),id(a14))
print('多变量赋值-tuple>tuple:',a15==a16,a15 is a16,a16 is a15,id(a15),id(a16))
# 多变量赋值-list>tuple: True False False 2174409739528 2174409739656
# 多变量赋值-tuple>tuple: True False False 2174409619136 2174409619064