淺拷貝與深拷貝

2022-02-09 06:43:53 字數 871 閱讀 3274

如何區分 簡單來說  b複製了a  如果修改a,b也跟著變化, 這就是淺拷貝(拿人手短)。如果修改了a ,b沒有變化 這是深拷貝(自食其力)

1、基本資料型別 number string boolean null undefined symbol

基本資料型別 名值儲存在棧記憶體中,當b=a   直接在棧記憶體中開闢記憶體

2、引用型別 名儲存在棧記憶體,值儲存在堆記憶體中,棧記憶體開闢個位址指向堆記憶體的值。

當b=a  b和a的棧記憶體位址同時指向 堆記憶體的同乙個值 

如深拷貝b=a  b和a指向堆記憶體中不同的值 修改任何乙個對另乙個沒有影響。

簡單是實現乙個深拷貝

function

deepclone(obj);

if(obj && typeof obj==="object")

else}}

}return

objclone;

}

let a=[1,2,3,4],

b=deepclone(a);

a[0]=2;

console.log(a,b);

期中需要注意concat方法與slice 對於物件只有一級層級的 是深拷貝 但 如果物件多於一級層級 是淺拷貝

出了遞迴還可以借助 json.stringfy 和 json.parse  來實現深拷貝

function

deepclone(obj)

let a=[0,1,[2,3],4],

b=deepclone(a);

a[0]=1;

a[2][0]=1;

console.log(a,b);

原理 先將物件轉換成字串 然後再轉換回來

「淺拷貝」與「深拷貝」

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