C 知識點 物件深拷貝和淺拷貝

2021-10-08 09:29:26 字數 657 閱讀 3210

一 、概念及原理

物件拷貝的目的是進行物件的複製,也就是將乙個物件裡面的資料完整的複製到乙個新的相同型別的物件中。由於物件中資料的儲存針對不同的資料型別儲存方式的不同,從而導致出現兩種資料拷貝的情況。c#中資料分為值型別和引用型別,對於值型別直接存的對應的值,再複製過程中直接複製對應值即可。對於引用型別儲存的是對應的資料物件的引用,因此複製的是之前物件中的資料物件的引用。

針對以上情況 就有了深拷貝、淺拷貝的概念。淺拷貝就只進行物件資料的複製,這種情況下引用型別的資料在新的物件中複製的是之前乙個物件中資料物件的引用,所以新舊連個物件引用的是同乙個資料物件,具體如下圖:

深拷貝不僅僅只是對資料的複製,對引用型別的資料也會複製乙份。具體如下圖:

二、實現

淺拷貝直接使用object物件中memberwiseclone()方法就可實現。

深拷貝有多種實現方式,基於反射、序列化、表示式樹。

知識點彙總 深拷貝和淺拷貝

淺拷貝 拷貝指標 深拷貝 複製乙個新的物件,兩個記憶體,修改其中乙個物件並不會影響另乙個物件 通過遞迴實現 淺拷貝 function copy target,source copy target item source item target item source item return targ...

拷貝python物件,淺拷貝和深拷貝

物件賦值實際上是簡單的物件引用。也就是說建立乙個物件然後賦值給另乙個變數的時候,python並沒有拷貝這個物件,而是拷貝了這個物件的引用。淺拷貝 淺拷貝的是物件本身,但是內容是原來物件的引用。拷貝物件本身是新的但是內容不是新的 拷貝物件的方式 來看 import copy a a b c 1,2,3...

C 淺拷貝和深拷貝

class test test const test t val new int t.val test private int val 現在定義兩個物件,test t1 9 test t2 t1 如果你不提供copy建構函式 注釋掉的那個 那麼t1和t2的成員 val指向同乙個物件,當析構的時候,同...