深度拷貝和淺度拷貝

2021-08-04 08:38:29 字數 755 閱讀 8064

文字說明:

比如乙個陣列(array)淺度拷貝是當陣列a變數成陣列b的時候,b改變裡面的陣列數值的時候,a也隨著改變,

深度拷貝是噹噹陣列a變數成陣列b的時候,b改變裡面的陣列數值的時候,a裡面的陣列陣列不隨著改變,

那麼為什麼淺度拷貝會改變a的陣列值而深度拷貝則不會呢?

因為淺度拷貝指向的是同乙個記憶體,而深度拷貝是增加了乙個新的記憶體,所以不會影響到原來a的記憶體, 所 以就不會改變原來的值

例子:淺度拷貝

var arr=["a","b","c","d","e"];

var arr=arr;

arr[1]='h';

console.log('arr:'+arr); //arr的下標1的『b』也變成了『h』 結果是:arr:a,h,c,d,e

console.log("arr:"+arr);//結果是:arr:a,h,c,d,e

深度拷貝

var arr=["a","b","c","d","e"];

var arr=json.stringify(arr);//先轉化為string字串的型別

var brr=json.parse(arr);//在解析字串的型別

brr[1]='h';             //這樣修改brr中的陣列的時候就不會影響到arr裡面陣列的值

console.log('arr:'+arr);//結果是arr:a,h,c,d,e

console.log("arr:"+brr);//結果是arr:a,h,c,d,e

js深度拷貝與淺度拷貝

如果你想真正自己理解和運用深度轉殖的話,首先必須要了解的就是js中的原始值和引用值,以及它們的儲存位置及方式。這裡簡單的說一下,原始值是儲存在棧裡的,而且儲存的是變數的實際值。引用值儲存在堆裡,且儲存的是乙個指標,該指標指向記憶體中的某個位置,該位置儲存變數的實際值。var a 2 var a co...

js深度拷貝和淺度拷貝的深入理解

首先我們來說說什麼是拷貝 就是複製的同時加上了傳值。然後問題就來了什麼是有深度的什麼是淺度的,在想要了解我們這個問題之前我們先來了解一下下面的乙個知識點 基本型別傳遞,引用型別傳遞 首先我們來看下基本型別傳遞 就是基本資料型別之間的資料傳遞,什麼是基本資料型別呢?string,number,bool...

List的深度copy和淺度拷貝

1 listlist arrays.aslist 2new student fndroid 22,student.sax.male,180 3new student jack 20,student.sax.male,170 4new student liliy 18,student.sax.fema...