lst1 = ["1","2","3"]
lst2 = lst1
lst1.append("4")
print(lst1)
print(lst2)
print(id(lst1),id(lst2))
print("\n")
lst1 = ["1", "2","3", ["1", "2", "3"]]
lst2 = lst1
lst1[3].append("4")
print(lst1)
print(lst2)
print(id(lst1[3]), id(lst2[3]))
对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量. 并不是复制一份内容. 所以. lst1的内存指向和lst2是一样的. lst1改变了, lst2也发生了改变
浅拷贝
lst1 = ["1","2","3"]
lst2 = lst1.copy()
lst1.append("4")
print(lst1)
print(lst2)
print(id(lst1),id(lst2))
print("\n")
lst1 = ["1", "2","3", ["1", "2", "3"]]
lst2 = lst1.copy()
lst1[3].append("4")
print(lst1)
print(lst2)
print(id(lst1[3]), id(lst2[3]))
外层地址改变,内层不变
浅拷贝(copy()):拷贝父对象,不会拷贝对象内部的子对象。
浅拷贝只复制某个对象的引用,而不复制对象本身,新旧对象还是共享同一块内存。
深拷贝
import copy
lst1 = ["1","2","3"]
lst2 = copy.deepcopy(lst1)
lst1.append("4")
print(lst1)
print(lst2)
print(id(lst1),id(lst2))
print("\n")
lst1 = ["1", "2","3", ["1", "2", "3"]]
lst2 = copy.deepcopy(lst1)
lst1[3].append("4")
print(lst1)
print(lst2)
print(id(lst1[3]), id(lst2[3]))
外层地址改变,内层改变
深拷贝deepcopy()):是copy模块中的方法,完全拷贝了子对象和父对象
深拷贝会创造一个一模一样的对象,新对象和原对象不共享内存,修改新对象不会改变原对对象。