1. 程式人生 > >Python-深拷貝與淺拷貝

Python-深拷貝與淺拷貝

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-深拷貝與淺拷貝