淺拷貝和深拷貝

假如當操作不可變類型的字符串時
一個變量等於另外一個變量 這時只是作爲了引用 兩個變量所指內存地址是一樣的
例如啊 a = “alex” b = a 這時b就指向了a的內存地址(b引用了a的內存地址)這時如果給a重新賦值 a就指向了新的內存地址 而b還是指向原來a所所指的地址 因爲如果是不可變類型的話在對對象進行操作的時候因爲本身是不可變的所以他要重新申請一塊區域

當操作可變類型的時候假如是一個列表
在對對象進行操作的時候因爲本身是可變的的所以他不需要新創建一塊區域 只需在原來的地址上進行操作
這時如果變量1 = [1,2,3] 變量2 = 變量1
變量2就指向了變量1所指向的那塊內存
如果變量1進行加減元素 變量2也會跟着發生變化 因爲兩個變量所指向的都是同一塊內存

可變類型
淺拷貝是新創建了一個跟原對象一樣的類型 但是他的內容是對原對象元素的引用 這個拷貝的對象本身是新的但內容不是
淺拷貝只拷貝第一層數據

淺拷貝是對一個對象的定層拷貝
即拷貝了引用並沒有拷貝內容

深拷貝是指在內存中將所有的數據遞歸拷貝重新創建一份

淺拷貝對於不可變類型 不會拷貝僅僅是指向
深拷貝對於不可變類型如果不可變類型中還欠套着可變的深拷貝就會拷貝 如果不是它也是指向 淺拷貝只要是不可變類型都是指向

切片[:]屬於淺拷貝
字典中的copy方法也是淺拷貝

發佈了25 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章