淺拷貝與深拷貝

2021-10-06 21:23:04 字數 1753 閱讀 2976

淺拷貝:指向被複製的記憶體位址,如果原位址裡的值發生改變,那麼淺拷貝出來的值也會發生改變。

深拷貝:開闢一塊新的記憶體位址,存放複製出來的物件。如果原位址裡的值發生改變,那麼對深拷貝出來的物件沒影響。

陣列的淺拷貝:concat,slice,[…],array.from,object.assign(,arr)

物件的淺拷貝:object.assign({},obj),

深拷貝:json.parse(json.stringify())不能拷貝函式,_.clonedeep

let arr =

;let obj =

}let deep =

json

.parse

(json

.stringify

(arr));

//下面幾個實現一維陣列的深拷貝,一維物件的深拷貝,總的來說他們實現的是淺拷貝

let concat = arr.

concat()

;let slice = arr.

slice()

;let extend =

[...arr]

;let

from

= array.

from

(arr)

;拷貝可列舉的物件,

let assign = object.

assign([

], arr)

;let assignobj = object.

assign

(, obj)

; arr[0]

.width =

200;

obj.key.value =2;

console.

log(

"deep:"

, deep)

;//;

console.

log(

"concat:"

, concat)

;//;

console.

log(

"slice:"

, slice)

;//;

console.

log(

"extend:"

, extend)

;//;

console.

log(

"from:"

,from);

//; console.

log(

"assign:"

, assign)

;//;

console.

log(

"assignobj:"

, assignobj)

;// }

//自定義深拷貝

function

deepcopy

(obj):

for(

let key in obj)

else}}

else

return newobj

}

名稱

和原資料是否指向同一物件

原資料為基本資料型別

原資料中包含子物件賦值是

改變會使原資料一同改變

改變會使原資料一同改變

淺拷貝否

改變不會使原資料一同改變

改變會使原資料一同改變

深拷貝否

改變不會使原資料一同改變

改變不會使原資料一同改變

「淺拷貝」與「深拷貝」

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