深拷貝,淺拷貝

2021-10-05 09:03:46 字數 1010 閱讀 5558

js中分為兩種資料型別

一種是基本資料型別

另一種是引用資料型別

淺拷貝只是複製物件的第一層屬性,並不包括物件裡面為引用型別的資料,如果屬性是基本型別,拷貝的就是基本型別的值,如果屬性時引用資料型別,拷貝的就是記憶體位址。當改變拷貝的物件裡面的引用型別時,原物件也會改變。

深拷貝會重新開闢乙個記憶體空間,拷貝多層,每一層級的資料都會拷貝過來。操作拷貝之後的物件的某個屬性不會影響原始物件中的屬性。

淺拷貝實現方法:

1.objcet.assign()

2.引用複製

//先定義乙個變數,往裡面放些屬性

var obj =

}//再定義乙個函式,函式裡面放乙個引數

function

objcopy

(fromobj)

//然後通過遍歷來將fromobj的屬性賦值給a

for(

var key in fromobj)

//最後把這個a返回出去

return a ;

}//然後在下面定義乙個變數,存呼叫objcopy的返回值

var x =

objcopy

(a)//

深拷貝

遞迴方法

//先定義乙個變數,裡面放些屬性

var obj =}}

//定義乙個函式,裡面存放兩個引數,to和from

function

deepcopy

(to,

from

) to[key]

=deepcopy

(to[key]

,from

[key])}

else}}

//返回to

return to

}var newobj =

deepcopy

(,obj)

;

淺拷貝 深拷貝

copy mutablecopy copy 不管是可變的,還是不可變的,結果都是不可變的 mutablecopy 不管是不可變的,還是可變的,結果都是可變的 nsmutablestring str nsmutablestring stringwithformat a nsarray arr1 str...

深拷貝 淺拷貝

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

淺拷貝 深拷貝

retain是建立乙個指標,引用物件計數加1。copy屬性表示兩個物件內容相同,新的物件retain為1 與舊有物件的引用計數無關,舊有物件沒有變化。copy減少物件對上下文的依賴。retain屬性表示兩個物件位址相同 建立乙個指標,指標拷貝 內容當然相同,這個物件的retain值 1也就是說,re...