python copy:
浅拷贝:
拷贝了对象指向的引用
如果对象内部存在可变对象, 哪么对内部的可变对象的改变是会影响到其它对象的
不是引用了被拷贝对象的地址, 而是拷贝对象容器中的元素地址
import copy l1 = [1, 2, 3, 4, 5, 6] d = copy.copy(l1) print(d) # [1, 2, 3, 4, 5, 6] d.append(9) # print(d) # [1, 2, 3, 4, 5, 6, 9] print(l1) # [1, 2, 3, 4, 5, 6] # ------------------------------------------ l2 = [1, 2, 3, 4, [5, 6, 7]] d2 = copy.copy(l2) print(d2) # [1, 2, 3, 4, [5, 6, 7]] d2.append(9) print(d2) # [1, 2, 3, 4, [5, 6, 7], 9] print(l2) # [1, 2, 3, 4, [5, 6, 7]] d2[4].append(0) print(l2) # [1, 2, 3, 4, [5, 6, 7, 0]] print(d2) # [1, 2, 3, 4, [5, 6, 7, 0], 9]
深拷贝:
直接拷贝了整个对象指向的内存并copy到另一个区域, 即使对象内部有可变对象
1 import copy 2 3 4 l1 = [1, 2, 3, 4, 5, 6] 5 6 d1 = copy.deepcopy(l1) 7 8 d1.append(8) 9 print(d1) # [1, 2, 3, 4, 5, 6, 8] 10 print(l1) # [1, 2, 3, 4, 5, 6] 11 12 # ----------------------------------- 13 14 l2 = [1, 2, 3, [4, 5]] 15 d2 = copy.deepcopy(l2) 16 17 d2[3].append(6) 18 print(l2) # [1, 2, 3, [4, 5]] 19 print(d2) # [1, 2, 3, [4, 5, 6]]
头一次写博客, 有错误的地方还请指正。
原文:https://www.cnblogs.com/deepstack/p/12599469.html