談談拷貝中坑 深拷貝與淺拷貝

2021-09-17 23:01:02 字數 1025 閱讀 3087

1.堆(stack)和棧(heap)

stack為自動分配的記憶體空間,它由系統自動釋放;而heap則是動態分配的記憶體,大小不定也不會自動釋放。

2.值與引用

js中有基本資料型別和引用型別;

基本資料型別的變數和值都是存放在棧中,宣告之後會分配一塊記憶體區域,基本資料型別之間的賦值是直接把棧記憶體中存的值賦值給變數(傳值)

引用型別的變數存在棧中,但值是存在堆中,實際上棧存放的是指向堆中的位址,也叫引用,引用型別直接的賦值實質是把引用賦值給乙個變數(傳址),所以其指向的堆記憶體中的值是一樣的

3.深拷貝和淺拷貝

深拷貝和淺拷貝的使用場景是在複雜物件裡,即物件的屬性還是物件,

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

例如:

var obj = ;

var shallowobj = shallowcopy(obj);

function shallowcopy(src) ;

for (var prop in src)

} return dst;

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

shallowobj.arr[1] = 5;

obj.arr[1] // = 5

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

(1)通過遞迴實現

deepcopy(o) 

return n;

} else if (o instanceof object)

for (let i in o)

return n;

} else

}

(2)通過json解析實現

//把乙個物件轉成json字串在轉成json物件

json.parse(json.stringify(o))

談談深拷貝和淺拷貝

今天在做專案購物車需求的時候,遇到乙個同深拷貝 淺拷貝相關的問題,所以來談談深拷貝和淺拷貝。什麼是深拷貝?複製基本型別的屬性 引用型別的屬性複製,複製棧中的變數 和 變數指向堆記憶體中的物件的指標和堆記憶體中的物件。什麼是淺拷貝?複製基本型別的屬性 引用型別的屬性複製,複製棧中的變數 和 變數指向堆...

簡單談談C 中深拷貝 淺拷貝

object.memberwiseclone 方法 建立當前 object 的淺表副本。protected object memberwiseclone memberwiseclone 方法建立乙個淺表副本,方法是建立乙個新物件,然後將當前物件的非靜態字段複製到該新物件。如果欄位是值型別的,則對該字...

python中深拷貝與淺拷貝的坑

之前遇到這樣一段 import numpy as np from sklearn import datasets from sklearn.model selection import train test split import collections digits datasets.load ...