import copy
A = [21, 22, 23, 24, ['a', 'b', 'c', 'd'], 25, 26]
B = A # 直接赋值
C = A[:] # 浅拷贝
D = copy.copy(A) # 浅拷贝
E = copy.deepcopy(A) # 深拷贝
# 看看深拷贝与浅拷贝的区别
# 在A数组的最尾处加一个数
A.append(99)
# 在A数组里面的数组最尾处加一个数
A[4].append(66)
print(f"起始列表A------------>{id(A)} {id(A[-4])}", A)
print(f"直接把A列表赋值给B---->{id(B)} {id(B[-4])}", B)
# 起始列表A------------>1941880691264 1941880677056 [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26, 99]
# 直接把A列表赋值给B---->1941880691264 1941880677056 [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26, 99]
print(f"直接浅拷贝A列表给C---->{id(C)} {id(C[-3])}", C)
print(f"直接浅拷贝A列表给D---->{id(D)} {id(D[-3])}", D)
# 直接浅拷贝A列表给C---->1941880738752 1941880677056 [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26]
# 直接浅拷贝A列表给D---->1941880738816 1941880677056 [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26]
print(f"直接深拷贝A列表给E---->{id(E)} {id(E[-3])}", E)
# 直接深拷贝A列表给E---->1941880738560 1941880738688 [21, 22, 23, 24, ['a', 'b', 'c', 'd'], 25, 26]
# 通过以上的例子我们来分析一下这几种复制列表的不同
1. 赋值其实只是传递对象引用,引用对象id是一样的。
2、 浅拷贝产生的对象本身是新的,但是没有拷贝子对象列表,子列表的内容不是新的,只是对原来子列表对象的一个引用。
3 、深拷贝包含对象里面的子对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变