深copy和淺copy區(qū)別 什么是深拷貝和淺拷貝?
什么是深拷貝和淺拷貝?簡單地說,假設(shè)B復(fù)制A。當(dāng)A被修改時,看看B是否會改變。如果B隨它改變,就意味著它是一個淺拷貝。如果a不改變,那就是深度復(fù)制和自我支撐。在本文中,我們還將簡要討論堆棧、基本數(shù)據(jù)類
什么是深拷貝和淺拷貝?
簡單地說,假設(shè)B復(fù)制A。當(dāng)A被修改時,看看B是否會改變。如果B隨它改變,就意味著它是一個淺拷貝。如果a不改變,那就是深度復(fù)制和自我支撐。在本文中,我們還將簡要討論堆棧、基本數(shù)據(jù)類型和參考數(shù)據(jù)類型,因為這些概念可以更好地理解深度復(fù)制和淺層復(fù)制。讓我們以一個淺拷貝為例:leta=[0,1,2,3,4],B=aconole.log文件(a===b)a[0]=1控制臺.log(a,b)嗯?明明B抄了a,為什么要修改a陣,B陣也變了,在這里我不禁想。這里,我們要介紹基本數(shù)據(jù)類型和參考數(shù)據(jù)類型的概念。采訪中常問,基本數(shù)據(jù)類型有哪些,數(shù)字、字符串、布爾、空、未定義五大類。引用數(shù)據(jù)類型(object class)包括object、array、date等。這兩種類型的數(shù)據(jù)存儲如下:a.基本類型-名稱值存儲在堆棧內(nèi)存中,例如,leta=1。復(fù)制B=a時,堆棧內(nèi)存將打開一個新內(nèi)存。例如,此時修改a=2時,不會影響B(tài),因為B已經(jīng)消耗了自己的能量,翅膀很硬,不受a的影響。當(dāng)然,leta=1,B=a。雖然B不受a的影響,但它不是深度復(fù)制,因為深度復(fù)制本身只用于更復(fù)雜的對象類型數(shù)據(jù)。b、 引用數(shù)據(jù)類型名稱存在于堆棧內(nèi)存中,值存在于堆內(nèi)存中,但堆棧內(nèi)存將為堆內(nèi)存中的值提供引用地址。讓我們畫一幅上面淺層復(fù)制示例的圖:當(dāng)B=a被復(fù)制時,實際復(fù)制的是a的引用地址,而不是堆中的值。當(dāng)我們在a[0]=1時修改數(shù)組時,由于a和B指向同一個地址,自然B也會受到影響,這就是所謂的淺拷貝。然后,如果在堆內(nèi)存中創(chuàng)建一個新內(nèi)存來存儲B的值,就像基本類型一樣,它將在開始時達到深度復(fù)制的效果
1。深拷貝和淺拷貝是源對象的拷貝,占用不同的內(nèi)存空間。
2. 不可變類型的對象對深副本和淺副本沒有影響,并且最終地址值和值是相等的。
3. 變量類型:
=shallow copy:等值,等地址
copy shallow copy:等值,不等地址
deep copy:等值,不等地址
你好,shallow copy(shadow clone):只復(fù)制對象的基本類型,對象類型,仍屬于原始引用deep copy(deep clone):不復(fù)制基本類型類的對象,還可以復(fù)制原始對象中的對象。也就是說,它完全是由新對象生成的。我希望它能幫助你。