深拷貝淺拷貝

2022-02-09 12:16:03 字數 1339 閱讀 9135

淺拷貝是指只是複製了存資料的位址,並沒有重新開闢資料,複雜的資料型別,比如object,array都是淺拷貝

var a=[1,2,3]

var b=a

console.log(a+'---'+b)

/** * 複製了a的

*/a[1] = 33

console.log(a+'---'+b)

如果a為基本資料型別,就是深拷貝,經過測試發現可以直接用var b=a

var a=22

var b=a

console.log(a+'---'+b)

/** * 如果a為乙個num型別

*/a = 33

console.log(a+'---'+b)

解決辦法:

1 使用json的方法

var a=[1,2,3]

//把陣列轉化為字串

var c = json.stringify(a)

//把字串轉化為陣列

var b=json.parse(c)

console.log(a+'---'+b)

a[1]=33

console.log(a+'---'+b)

2 使用遞迴拷貝

//遞迴拷貝的方法

3 使用es6的擴充套件運算子

var a = 

var b=

console.log(a)

console.log(b)

/** * 複製了a的

*/a.z='123'

console.log(a)

console.log(b)

淺拷貝 深拷貝

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