深拷貝與淺拷貝的區別

2021-09-25 14:10:45 字數 845 閱讀 8704

深拷貝與淺拷貝的區別

淺拷貝是指只複製一層物件,當物件的屬性是引用型別時,實質複製的是其引用,當引用指向的值改變時也會跟著變化

案例

var obj =

;var shallowobj =

shallowcopy

(obj)

;function

shallowcopy

(src)

;for

(var prop in src)

}return dst;

}//當乙個物件屬性的引用值改變時將導致另乙個也改變

shallowobj.arr[1]

=5;obj.arr[1]

// = 5

深拷貝是指複製物件的所有層級,實現方法

deepcopy

(o)return n;

}else

if(o instanceof

object

)for

(let i in o)

return n;

}else

}

為什麼要使用深拷貝?

我們希望在改變新的陣列(物件)的時候,不改變原陣列(物件)

深拷貝的要求程度

我們在使用深拷貝的時候,一定要弄清楚我們對深拷貝的要求程度:是僅「深」拷貝第一層級的物件屬性或陣列元素,還是遞迴拷貝所有層級的物件屬性和陣列元素?

怎麼檢驗深拷貝成功

改變任意乙個新物件/陣列中的屬性/元素, 都不改變原物件/陣列

淺拷貝與深拷貝的區別

簡單的來說就是,在有指標的情況下,淺拷貝只是增加了乙個指標指向已經存在的記憶體,而深拷貝就是增加乙個指標並且申請乙個新的記憶體,使這個增加的指標指向這個新的記憶體,採用深拷貝的情況下,釋放記憶體的時候就不會出現在淺拷貝時重複釋放同一記憶體的錯誤!我列舉乙個例子來說吧 你正在編寫c 程式中有時用到,操...

淺拷貝與深拷貝的區別

簡單的來說就是,在有指標的情況下,淺拷貝只是增加了乙個指標指向已經存在的記憶體,而深拷貝就是增加乙個指標並且申請乙個新的記憶體,使這個增加的指標指向這個新的記憶體,採用深拷貝的情況下,釋放記憶體的時候就不會出現在淺拷貝時重複釋放同一記憶體的錯誤!我列舉乙個例子來說吧 你正在編寫c 程式中有時用到,操...

淺拷貝與深拷貝的區別

在python中有乙個copy模組。copy.copy 是淺拷貝 copy.deepcopy 是深拷貝 對於不可變型別,無論是淺拷貝還是深拷貝都只是指向作用,沒有進行拷貝,對於可變型別copy.copy 與copy.deepcopy存在差距 import copy a 1,2,3 b 4,5 c a...