C 淺轉殖與深轉殖(淺拷貝與深拷貝)

2022-06-09 11:45:08 字數 887 閱讀 6028

介紹

(1)淺轉殖

在淺轉殖中,如果原型物件的成員變數是值型別,將複製乙份給轉殖物件;如果原型物件的成員變數是引用型別,則將引用物件的位址複製乙份給轉殖物件,也就是說原型物件和轉殖物件的成員變數指向相同的記憶體位址。簡單來說,在淺轉殖中,當物件被複製時只複製它本身和其中包含的值型別的成員變數,而引用型別的成員物件並沒有複製,如圖:

通過實現icloneable介面的clone()方法,並呼叫memberwiseclone()方法來實現淺轉殖

(2)深轉殖

在深轉殖中,無論原型物件的成員變數是值型別還是引用型別,都將複製乙份給轉殖物件,深轉殖將原型物件的所有引用物件也複製乙份給轉殖物件。簡單來說,在深轉殖中,除了物件本身被複製外,物件所包含的所有成員變數也將複製,如圖:

在c#語言中,如果需要實現深轉殖,可以通過序列化(serialization)等方式來實現。序列化就是將物件寫到流的過程,寫到流中的物件是原有物件的乙個拷貝,而原物件仍然存在於記憶體中。通過序列化實現的拷貝不僅可以複製物件本身,而且可以複製其引用的成員物件,因此通過序列化將物件寫到乙個流中,再從流裡將其讀出來,可以實現深轉殖。需要注意的是能夠實現序列化的物件其類必須實現serializable介面,否則無法實現序列化操作。

JS實現深拷貝 深轉殖 和淺拷貝 淺轉殖

淺拷貝 只複製物件的基本型別,對於引用型別,只是轉殖位址 包含的內嵌的物件或陣列,不再複製副本 引用型別,只是轉殖位址,那麼原物件修改,轉殖後的新物件也會跟著變化,轉殖不徹底 陣列的array.from 方法就是實現的淺拷貝 物件的object.assign 方法也是實現的淺拷貝 深拷貝 複製物件的...

Java 轉殖,淺拷貝,深拷貝

當使用 賦值引用型別的時候,其實是直接賦值該物件的位址,本質還是乙個物件。而轉殖則是完全創造乙個新的物件出來,有自己的新位址,只是初始化的資料相同。轉殖屬於淺拷貝。person p1 newperson tom 11 person p2 p1 person p3 person p1.clone sy...

淺轉殖與深轉殖

clone 方法是object中的乙個方法 淺轉殖 shallow copy employee cindy tobby.clone 深轉殖 deep copy 必須實現cloneable介面 class employee implements cloneable 如果物件中有引用型別,就必須使用深度...