拷貝和深淺拷貝

2022-04-28 05:53:30 字數 1411 閱讀 5711

當list2為list的拷貝物件時,list內的可變資料型別變化,list2變化;list內的不可變資料型別變化,list2變化。總之、list變化list2一定變化

list = [1,2,3,4,]

list2 = list

print(list)

print(list2)

[1, 2, 3, 4, 5]

[1, 2, 3, 4, 5]

當list2為list的拷貝物件時,list內的不可變資料型別變化,list2不會發生變化

import copy

list = [1,2,3,4]

list2 = copy.copy(list)

print(list)

print(list2)

[1, 2, 3, 4, 6]

[1, 2, 3, 4]

當list2為list的拷貝物件時,list內的可變資料型別變化,list2變化,這裡的[5,6,7]就是個可變資料型別啊!

import copy

list = [1,2,3,4,[5,6,7]]

list2 = copy.copy(list)

list[-1].insert(1,8) #這種是插入、可以指定在列表任意位置插入

print(list)

print(list2)

[1, 2, 3, 4, [5, 5, 6, 7]]

[1, 2, 3, 4, [5, 5, 6, 7]]

當list2為list的拷貝物件時,list內無論是可變型別變化還是不可變資料型別變化,list2都不會發生變化

import copy

list = [1,2,3,4,[5,6,7]]

list2 = copy.deepcopy(list)

print(list)

print(list2)

[1, 2, 3, 4, [5, 6, 7, 9]]

[1, 2, 3, 4, [5, 6, 7]]

牢記:拷貝/淺拷貝/深拷貝/只針對可變資料型別

拷貝淺拷貝

深拷貝list變化list2變化

list可變資料型別變化,list2變化

list不可變資料型別變化,list2不變化

list變化,list無變化

深淺拷貝以及深淺拷貝的方法

先考慮一種情況,對乙個已知物件進行拷貝,編譯系統會自動呼叫一種建構函式 拷貝建構函式,如果使用者未定義拷貝建構函式,則會呼叫預設拷貝建構函式。執行結果 呼叫一次建構函式,呼叫兩次析構函式,兩個物件的指標成員所指記憶體相同,name指標被分配一次記憶體,但是程式結束時該記憶體卻被釋放了兩次,會造成記憶...

toString 和深淺拷貝

在異常處理中,常用到乙個函式就是tostring 返回乙個string型別,描述異常的基本資訊。事實上,對於每個類都可以重寫tostring 函式,比如說,我們定義了乙個物件,student s 如果想以如下的格式system.out.println s 列印出我們想要的資訊,就必須重寫tostri...

拷貝建構函式 深淺拷貝

為什麼拷貝建構函式必須為引用傳遞,不能是值傳遞 簡單的回答bai是為了防止遞迴引用。du 具體一些zhi可以這麼講 當 乙個dao物件需要zhuan以值方式傳遞時,編譯shu器會生成 呼叫它的拷貝建構函式以生成乙個複本。如果類a的拷貝建構函式是以值方式傳遞乙個類a物件作為引數的話,當 需要呼叫類a的...