深浅拷贝
-
现象1 a = 10 b = a a = 15 print(b) # 10 现象2 lst1 = [1,2,3] lst2 = lst1 lst1.append(4) print(lst2) # [1, 2, 3, 4]
-
浅拷贝 copy
import copy lst1 = [1,2,3] 一个做copy的文件中有一个copy函数方法 写法一 (推荐) lst2 = copy.copy(lst1) #[1, 2, 3] 写法二 列表.copy() => 复制一个独立的副本; lst2 = lst1.copy() #[1, 2, 3] lst1.append(4) print(lst2)
二级容器没有被拷贝出来,没有独立出来,延续使用以前的地址空间; 现象 lst1 = [1,2,3,[4,5,6]] lst2 = copy.copy(lst1) lst1[-1].append(10) # [1, 2, 3, [4, 5, 6, 10]] lst1.append(777) print(lst2)
-
深拷贝
lst1 = [1,2,3,[4,5,6]] lst2 = copy.deepcopy(lst1) lst1[-1].append(10) lst1.append(777) print(lst2)
-
小练习
lst1 = [1,2,3,{"a":1,"b":2}] lst2 = copy.copy(lst1) lst2 = copy.deepcopy(lst1) lst1[-1]["b"] = 10 print(lst2)
浅拷贝: 只拷贝一级容器中的所有数据到一个独立空间里 深拷贝: 拷贝所有层级容器中的所有元素到一个独立的空间里,与原空间地址分开; 浅拷贝:速度快,空间小 深拷贝:速度稍慢,空间大 具体看是深还是浅拷贝,得看是几级容器,如果是一级,就用浅拷贝就行;