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