深拷貝 淺拷貝

2022-05-17 19:01:15 字數 1428 閱讀 3037

淺拷貝:值的引用指向新的變數,當新的變數的值有改動,那麼被拷貝的變數的值也會跟著變動

深拷貝:申請乙個新的記憶體空間,將被拷貝的值複製到新的記憶體中。拷貝變數的值改變,被拷貝的變數的值不會改變

實現深度拷貝

1、json.stringify()

function deepclone(obj)

2、for...in 遍歷和複製

function deepclone(obj) ;

if( obj && typeof obj === 'object' ) else

}return result;

}return obj;

}

3、array.prototype.foreach

function deepclone(obj) );

return copy;

}

實現淺拷貝

object.assign()

如果物件或者陣列只有一級屬性沒有二級屬性,那麼assign()方法是深拷貝。像下面的第乙個例子

如果有二級屬性,那麼二級以後的屬性就是淺拷貝。下面的第二個例子

let a = ["asd", "666", "ecc", "bcc"];

let b = ;

object.assign(b, a);

b[0] = "qqq";

console.log(`value of a: $, value of b: $`);

// value of a: ["asd", "666", "ecc", "bcc"], value of b: ["qqq", "666", "ecc", "bcc"]

let a = a = ["asd", "666", "ecc", "bcc", ]

let b = ;

object.assign(b, a);

b[4].name = "qqq";

console.log(`value of a: $, value of b: $`);

// value of a: ["asd", "666", "ecc", "bcc", ], value of b: ["asd", "666", "ecc", "bcc", ]

淺拷貝 深拷貝

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