前端深拷貝和淺拷貝的區(qū)別 淺拷貝與深拷貝的區(qū)別是什么?
淺拷貝與深拷貝的區(qū)別是什么?1. 深拷貝和淺拷貝都是源對象的拷貝,占用不同的內(nèi)存空間。2. 不可變類型的對象對深副本和淺副本沒有影響,并且最終地址值和值是相等的。3. 變量類型:=淺拷貝:簡而言之,如
淺拷貝與深拷貝的區(qū)別是什么?
1. 深拷貝和淺拷貝都是源對象的拷貝,占用不同的內(nèi)存空間。
2. 不可變類型的對象對深副本和淺副本沒有影響,并且最終地址值和值是相等的。
3. 變量類型:
=淺拷貝:簡而言之,如果B拷貝a,當B修改a時,就會看到B是否改變。如果B也改變了,這意味著它是一個淺拷貝。如果a沒有改變,它就是一個深度拷貝。在本文中,我們還將簡要討論堆棧、基本數(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的影響。當然,leta=1,B=a。雖然B不受a的影響,但它不是深度復(fù)制,因為深度復(fù)制本身只用于更復(fù)雜的對象類型數(shù)據(jù)。b、 引用數(shù)據(jù)類型名稱存在于堆棧內(nèi)存中,值存在于堆內(nèi)存中,但堆棧內(nèi)存將為堆內(nèi)存中的值提供引用地址。讓我們畫一幅上面淺層復(fù)制示例的圖:當B=a被復(fù)制時,實際復(fù)制的是a的引用地址,而不是堆中的值。當我們在a[0]=1時修改數(shù)組時,由于a和B指向同一個地址,自然B也會受到影響,這就是所謂的淺拷貝。然后,如果在堆內(nèi)存中創(chuàng)建一個新的內(nèi)存來存儲B的值,就像基本類型一樣,一開始就會達到深度復(fù)制的效果
淺復(fù)制意味著源對象和復(fù)制對象共享同一個實體,只是引用的變量不同(名稱不同)。對其中一個對象的更改會影響另一個對象。例如,一個人的名字起初是張三,后來改成了李四,但卻是同一個人。無論是張三缺胳膊缺腿,還是李四缺胳膊缺腿,都是同一個人的厄運。深度復(fù)制是指源對象和復(fù)制對象相互獨立,任何對象的改變都不會影響到另一個對象。例如,一個叫張三的人被用來克隆另一個叫李四的人。不管張三缺胳膊缺腿,李四缺胳膊缺腿,都不會影響別人。典型的是值對象,如預(yù)定義的int32、double、struct、enum等類型
什么是深拷貝和淺拷貝?
一般來說,深度復(fù)制和淺層復(fù)制的區(qū)別主要在于指針(或指針)。淺層復(fù)制只是將源對象的指針(它指的是通用對象,而不僅僅是類的實例)分配給目標對象。目標指針的操作是源對象的操作,因此在許多情況下,目標對象被銷毀(或跳出),然后源對象的相關(guān)部分也被銷毀。深度復(fù)制是為目標對象重新分配空間,它可以從源對象的操作中分離出來。
編程里面的深拷貝和淺拷貝各是什么意思,怎么理解這兩個?
你好,淺復(fù)制(shadow clone):只復(fù)制對象的基本類型,對象類型仍然屬于原始引用。深度復(fù)制(Deep clone):不僅復(fù)制對象的基本類,還復(fù)制原始對象中的對象。也就是說,它完全是由新對象生成的。我希望它能幫助你。