淺拷貝與深拷貝講解

2021-10-05 02:50:43 字數 877 閱讀 7876

如果b複製了a,修改b時如果a也跟隨b發生改變,那麼這個就是淺拷貝,舉個在生活中的例子,就好比一台電腦,被人遠端連線了,雖然感覺是變成了兩個電腦而且都有相同的內容,但是其實電腦的內容存在的硬碟是乙個,不管是遠端連線的人對電腦進行修改還是本機進行修改,都會影響雙方的電腦。

如果b複製了a,修改b,a沒用發生變化,修改a,b也不會變,那麼這個就是深拷貝,舉個例子,就好比我直接拿你的電腦硬碟,複製了乙份,然後插在我電腦上,雖然我們一開始看的內容是相同的,但實際之後我對我電腦的操作對你的電腦不會影響,你對我也不會有影響。

首先,要了解在js中是分兩種資料型別,一種是基本型別(例如:number,string,boolean,null,undefined)一種是引用型別(例如:物件,陣列),而且只有在引用型別的前提下才會出現深淺拷貝的情況,因為只有引用型別才會有棧記憶體和堆記憶體,才會發生是棧記憶體拷貝(淺拷貝)還是堆記憶體拷貝(深拷貝)的情況,而基本型別是沒用堆記憶體的,所以直接複製(如a=b),就會開闢乙個新的記憶體。

簡單一句話,只要是複製通過棧記憶體的複製那麼就是淺拷貝,如果通過堆記憶體的複製那麼就是深拷貝

舉個例子:堆記憶體就是電腦的硬碟,而棧記憶體就是電腦的顯示屏

function isobject(o) 

// 迭代遞迴法:深拷貝物件與陣列

function deepclone(obj)

let isarray = array.isarray(obj)

let cloneobj = isarray ? : {}

for (let key in obj)

return cloneobj

}

var b = json.parse(json.stringify(a));

Go語言講解深拷貝與淺拷貝

我們在開發中會經常的把乙個變數複製給另乙個變數,那麼這個過程,可能是深淺拷貝,那麼今天幫大家區分一下這兩個拷貝的區別和具體的區別。一 概念 1 深拷貝 deep copy 拷貝的是資料本身,創造乙個樣的新物件,新建立的物件與原物件不共享記憶體,新建立的物件在記憶體中開闢乙個新的記憶體位址,新物件值修...

「淺拷貝」與「深拷貝」

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

淺拷貝與深拷貝

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