Python 深拷貝與淺拷貝

2022-08-30 10:00:09 字數 834 閱讀 9675

python中如何為可變的資料型別賦值。python中可變的資料型別有 列表(list)、字典(dict)、集合(set),由於這兩中數型別在賦值時,變數值獲得了該值的乙個引用,因此在通過任意乙個變數改變該值時,其他變數對應的值也會發生變化。對於這種情況,python有copy庫,可通過深拷貝與淺拷貝的方式為變數賦值,從而實現值的傳遞。

copy.copy()實現淺拷貝,copy.deepcopy()實現深拷貝,兩者的區別與直接賦值的區別如下**結果所示。

1

import

copy

23 a = [1,2,3,[1,2],1]

4 b =a

5 c =copy.copy(a)

6 d =copy.deepcopy(a)

7print(a,b,c,d,sep = "--"

)8a.pop()

10print(a,b,c,d,sep = "--"

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

淺拷貝 構造方法或切片 做的是淺拷貝 即拷貝了最外層容器,副本中的元素是原容器中元素的引用 在 python 中,通過乙個物件向另外乙個物件賦值,實際僅僅是賦值了物件的引用,而非建立乙個物件並賦值。那如何真正拷貝物件呢?我們看一下兩種不同的拷貝方式。先從乙個示例看起 anndy anndy age ...

Python 淺拷貝與深拷貝

以下例項是使用 copy 模組的 copy.copy 淺拷貝 和 copy.deepcopy usr bin python coding utf 8 import copy a 1,2,3,4,a b 原始物件 b a 賦值,傳物件的引用 c copy.copy a 物件拷貝,淺拷貝 d copy....

python 深拷貝與淺拷貝

當乙個變數 的時候,約定為 指向位址的過程 如果copy.copy 拷貝的是元組,那麼它不會進行淺拷貝,僅僅是指向 因為元組是不可變資料型別,那麼意味著資料一定不能修改,因此用copy.copy的 時候它會自動判斷,是指向。如果,用copy.copy copy.deepcopy 對乙個全部是不可變型...