深拷貝與淺拷貝

2021-10-23 03:37:15 字數 883 閱讀 7528

1、淺拷貝

只複製引用,不複製內容,即指向同一記憶體位址

a = [11, 22, 33]

b = a

#指向同一記憶體位址

id(a) == id(b)

2、深拷貝

重新開闢乙個記憶體,複製內容

import copy

a = [11, 22, 33]

b = copy.deepcopy(a)

#指向不同的記憶體位址

id(a) != id(b)

注:遞迴拷貝

import copy

a = [11, 22, 33]

b = [44, 55, 66]

c = [a, b]

#使用copy,只對頂層進行深拷貝

e = copy.copy(c)

# c 和 e 指向不同的記憶體位址

id(c) != id(e)

#但是 c 裡面的引用a、b 和 e 裡面的引用a、b 指向相同的記憶體位址

#即 copy 只對第一層的內容進行開闢記憶體複製

#使用deepcopy,遞迴拷貝

e = copy.deepcopy(c)

# c 和 e 指向不同的記憶體位址

id(c) != id(e)

# c 裡面的引用a、b 和 e 裡面的引用a、b 指向不同的記憶體位址

#即 deepcopy 對所有要複製內容進行開闢記憶體複製

#copy可根據當前拷貝的內容資料型別是可變型別還是不可變型別採取不同的處理方式

c = (a, b)

e = copy.copy(c)

# c 和 e 指向相同的記憶體位址

「淺拷貝」與「深拷貝」

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...

淺拷貝與深拷貝

淺拷貝 1 2 myclass a,b a b 為了封裝性和解耦,同型別的兩個物件之間進行賦值操作時,所有成員變數被複製,包括私有成員 指標變數。類的成員函式在傳遞或返回物件時都會進行物件複製產生臨時物件,比如函式呼叫時實參變為形參,以及函式返回物件。考慮到效能和使用者要求不同,編譯器不複製物件內部...

「淺拷貝」與「深拷貝」

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...