Python-深拷貝與淺拷貝
阿新 • • 發佈:2019-03-26
import 相同 pop 其他 spa int 列表 改變 獲得
Python中如何為可變的數據類型賦值。Python中可變的數據類型有 列表(list)、字典(dict)、集合(set),由於這兩中數類型在賦值時,變量值獲得了該值的一個引用,因此在通過任意一個變量改變該值時,其他變量對應的值也會發生變化。對於這種情況,Python有copy庫,可通過深拷貝與淺拷貝的方式為變量賦值,從而實現值的傳遞。
copy.copy()實現淺拷貝,copy.deepcopy()實現深拷貝,兩者的區別與直接賦值的區別如下代碼結果所示。
1 import copy 2 3 a = [1,2,3,[1,2],1] 4 b = a 5 c = copy.copy(a)6 d = copy.deepcopy(a) 7 print(a,b,c,d,sep = "--") 8 a.pop() 9 a[3].append(100) 10 print(a,b,c,d,sep = "--") 11 12 [1, 2, 3, [1, 2], 1]--[1, 2, 3, [1, 2], 1]--[1, 2, 3, [1, 2], 1]--[1, 2, 3, [1, 2], 1] 13 [1, 2, 3, [1, 2, 100]]--[1, 2, 3, [1, 2, 100]]--[1, 2, 3, [1, 2, 100], 1]--[1, 2, 3, [1, 2], 1]
b為直接通過賦值進行拷貝,此時b僅僅得到了列表的一個引用,因此通過變量a改變列表時,變量b指向的值也會發生相同的變化。
而變量c通過淺拷貝得到列表的值,此時通過變量a 僅能改變變量c中子對象的值,
變量d通過深拷貝得到列表的值,此時變量a與變量d之間的值不會相互影響。
Python-深拷貝與淺拷貝