理解深淺拷貝

2021-10-02 06:28:34 字數 684 閱讀 4947

當例項化乙個物件的時候,呼叫建構函式,系統為給當前物件在棧上分配對應大小的位址空間,並通過指標指向當前位址空間首位址。

如果我們新建物件,並用已有物件初始化當前物件,此時編譯器就會自動建立拷貝構造,而拷貝構造有深淺拷貝之分。

編譯器預設的拷貝為淺拷貝。

淺拷貝的實質是拷貝物件的位址,將當前物件的位址拷貝為已知物件的記憶體位址,可以理解為將當前物件的指標指向已知物件的位址,拷貝的物件與被拷貝的物件共用一塊記憶體空間。

淺拷貝的特點是拷貝記憶體位址,物件1與物件2的位址指標相同,所以如果當物件1修改內部資料時,物件2中的資料也會發生相應的變化,兩個物件操作的時同一塊記憶體空間

深拷貝簡單理解為,將被拷貝物件中的所有內容都複製到新物件中,新物件有自己的記憶體空間,只是記憶體中的內容與被拷貝的物件完全相同。

深拷貝只是拷貝物件中的內同,物件1與物件2有自己的記憶體位址,指向不同的位址空間,所以物件1修改自身資料時,物件2不收影響,各自有各自的空間,各玩各的

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

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

拷貝和深淺拷貝

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

對 「 」, 「is」 以及賦值 深淺拷貝的理解

與 is 的區別 判斷 值,比較兩個物件是否相等 is 判斷 位址,比較兩個引用是否指向了同乙個物件 引用比較 賦值 深拷貝 淺拷貝的區別 首先,不可變資料型別的記憶體都指向同乙個位址,所以深拷貝和淺拷貝對於不可變資料型別而言都是無意義的。對於不可變資料型別 import copy 深拷貝 pyth...