淺拷貝與深拷貝

2022-09-04 16:09:13 字數 719 閱讀 1104

淺拷貝:不是完全新的物件(只拷貝的父物件,而不會拷貝裡面的子物件,子物件仍然是原來物件的子物件)

1:列表自身切片賦值

2:匯入copy模組,然後再copy.copy(listname)可淺拷貝,但巢狀列表的作用效果可以作用在淺拷貝上

應用:改變列表中的巢狀列表可以用淺拷貝,而源列表中的子元素不改變,只是源列表中的巢狀列表隨著源列表的改變而改變

深拷貝:完全是乙個新的物件(對父物件進行了拷貝,也對子物件進行了拷貝。是乙個全新的物件了)

copy.deepcopy(listname)

# 淺拷貝

import copy

a = [1,2,3,4,5,6,[1,2,3,44]]

b = a[:] # 切片賦值,這裡的切片賦值為啥沒受到源列表改變的影響,緣由切片賦值可以看成是淺拷貝

c = copy.copy(a) # 淺拷貝

d = copy.deepcopy(a) # 深拷貝

e = a # 直接賦值,還是作用在同乙個物件上

# 修改原列表的值

a[0] = 11

a[-1][-1] = 16 # 巢狀列表的作用效果可以作用在淺拷貝上

print(e,id(e))

print(a,id(a))

print(b,id(b))

print(c,id(c))

print(d,id(d))

「淺拷貝」與「深拷貝」

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...