python 深拷貝,淺拷貝

2022-05-05 00:57:08 字數 838 閱讀 2057

深拷貝,淺拷貝

深拷貝,即將被複製物件完全再複製一遍作為獨立的新個體單獨存在。所以改變原有被複製物件不會對已經複製出來的新物件產生影響。

淺拷貝,並不會產生乙個獨立的物件單獨存在,他只是將原有的資料塊打上乙個新標籤,所以當其中乙個標籤被改變的時候,資料塊就會發生變化,另乙個標籤也會隨之改變。這就和我們尋常意義上的複製有所不同了。

# 實際**

data =

for i in range(1, 3):

book_data = data

book_data['expect_discard_time'] = expect_discard_time

book_data['number'] = str(number) + '-' + str(i)

book_data['type_book'] = type_book

book_data.pop('quantity')

當我使book_data = data時,我變更book_data, data會同步變更,導致迴圈第二次時,data沒有了quantity欄位

# 改正

for i in range(1, 3):

book_data = copy.deepcopy(data)

book_data['expect_discard_time'] = expect_discard_time

book_data['number'] = str(number) + '-' + str(i)

book_data['type_book'] = type_book

book_data.pop('quantity')

python 淺拷貝 深拷貝

直接賦值 其實就是物件的引用 別名 淺拷貝 copy 拷貝父物件,不會拷貝物件的內部的子物件。深拷貝 deepcopy copy 模組的 deepcopy 方法,完全拷貝了父物件及其子物件。usr bin python import copy a 1,2,3,4,a b 原始物件 b a 賦值,傳物...

python深拷貝 淺拷貝

在python中,物件賦值實際上是物件的引用。當建立乙個物件,然後把它賦給另乙個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用 一般有三種方法,alist 1,2,3,a b 1 直接賦值,傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變 alist 1,2,3,...

python 深拷貝 淺拷貝

淺拷貝是對於乙個物件的頂層拷貝 通俗的理解是 拷貝了引用,並沒有拷貝內容 深拷貝是對於乙個物件所有層次的拷貝 遞迴 拷貝字典 值相當於鍵的引用 所以copy.copy 為淺拷貝 淺拷貝對不可變型別和可變型別的copy不同 copy.copy對於可變型別,會進行淺拷貝 copy.copy對於不可變型別...