深拷貝與淺拷貝

2021-10-17 15:14:28 字數 1130 閱讀 8608

1、什麼是深拷貝?

深拷貝主要是將另乙個物件的屬性值拷貝過來之後,另乙個物件的屬性值並不受到影響,因為此時它自己在堆中開闢了自己的記憶體區域,不受外界干擾。

2、深拷貝的方法

(1)json轉換

var targetobj =

json

.parse

(json

.stringify

(copyobj)

)let arr4 =

json

.parse

(json

.stringify

(arr)

)

缺點是:

1、如果物件裡有函式,函式無法被拷貝下來

2、無法拷貝copyobj物件原型鏈上的屬性和方法

3、當資料的層次很深,會棧溢位

(2)普通遞迴函式

function

deepcopy

( source )

//陣列相容

for(

var k in source )

else}}

return target

}function

isobject

(obj)

缺點:

1、無法保持引用

2、當資料的層次很深,會棧溢位

(3)防棧溢位函式

function

cloneloop

(x);

// 棧

const looplist =

;while

(looplist.length);}

for(

let k in data));

}else}}

}return root;

}

優點:

(1)不會棧溢位

(2)支援很多層級的資料

1、什麼是淺拷貝?

淺拷貝主要拷貝的是物件的引用值,當改變物件的值,另乙個物件的值也會發生變化。

可參考鏈結 你真的理解深拷貝與淺拷貝了嗎?

「淺拷貝」與「深拷貝」

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