深拷貝與淺拷貝

2021-09-21 13:42:27 字數 770 閱讀 3720

通過for in 迴圈遍歷obj1中的元素,依次賦值給obj2,但是obj1的屬性中有乙個dog屬性也是乙個物件,這樣複製給obj2的只是把dog這個物件的位址複製過去了,obj2中的dog物件並沒有重新開闢乙個空間,相當於obj1和obj2的dog屬性是共享同乙個位址的,所以當你改變obj1中 dog的屬性值,obj2也會相應的改變,這就是淺拷貝。

var obj1 = 

var obj2 = {}

for (var k in obj1)

console.log(obj1, obj2);

2.深拷貝-遞迴(位址傳遞),不管屬性是簡單還是複雜型別,都複製一遍(會重新開闢新空間),當屬性裡面還巢狀複雜資料型別,這個時候用遞迴不斷往下遍歷複製。
function deepcopy(ol1, ol2)  ,三元表示式                 

ol2[k] = ol2[k] instanceof array ? : {};

// 如果屬性裡又存在複雜資料型別,巢狀很多層,這裡就利用遞迴,不斷往下找

deepcopy(ol1[k], ol2[k])

} else }}

deepcopy(obj1, obj2);

obj1.usname = '修改後'

obj1.dog.yoll = '修改後'

console.log(obj1);

console.log(obj2); // 這時修改obj1裡的屬性後,obj2不會隨之改變了

「淺拷貝」與「深拷貝」

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...

淺拷貝與深拷貝

淺拷貝 1 2 myclass a,b a b 為了封裝性和解耦,同型別的兩個物件之間進行賦值操作時,所有成員變數被複製,包括私有成員 指標變數。類的成員函式在傳遞或返回物件時都會進行物件複製產生臨時物件,比如函式呼叫時實參變為形參,以及函式返回物件。考慮到效能和使用者要求不同,編譯器不複製物件內部...

「淺拷貝」與「深拷貝」

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...