理解一下python中的淺copy和深copy

2022-05-05 04:39:10 字數 1375 閱讀 2250

最近在學習過程中,了解了一下,淺copy和深copy,做個記錄。

所謂淺拷貝就是對引用的拷貝,所謂深拷貝就是對物件的資源的拷貝。

首先,對賦值操作我們要有以下認識:

賦值是將乙個物件的位址賦值給乙個變數,讓變數指向該位址( 舊瓶裝舊酒 )。

修改不可變物件(strtuple)需要開闢新的空間

修改可變物件(list等)不需要開闢新的空間

>>> user = ['tom', ['age', 20]]

>>> user_new = user.copy()

>>> user_new

['tom', ['age', 20]]

>>> user[0] = 'jack'

>>> user[1][1] = 19

>>> user

['jack', ['age', 19]]

>>> user_new

['tom', ['age', 19]]

這裡可以看出,未修改前,user和user_new中元素的位址都是相同的,不可變的 'tom' 和可變的list位址都一樣。

說明淺拷貝知識將容器內的元素的位址複製了乙份。這可以通過修改後,user_new中字串沒改變,但是list元素隨著user相應改變得到驗證。

淺拷貝是在另一塊位址中建立乙個新的變數或容器,但是容器內的元素的位址均是源物件的元素的位址的拷貝。也就是說新的容器中指向了舊的元素( 新瓶裝舊酒 )

>>> import copy

>>> user = ['tom', ['age', 20]]

>>> user_new = copy.deepcopy(user)

>>> user_new

['tom', ['age', 20]]

>>> user[0] = 'jack'

>>> user[1][1] = 19

>>> user

['jack', ['age', 19]]

>>> user_new

['tom', ['age', 20]]

這裡可以看出,深拷貝後,user和user_new的位址以及user和user_new中的元素位址均不同,這是完全拷貝的乙個副本。

修改user後,發現user_new沒有發生任何改變,因為user_new是乙個完全的副本,元素位址與user均不同,user修改不影響user_new。

深拷貝是在另一塊位址中建立乙個新的變數或容器,同時容器內的元素的位址也是新開闢的,僅僅是值相同而已,是完全的副本。也就是說( 新瓶裝新酒 )。

理解一下char p char p

一開始學的時候,char p就是指標的指標 那時候沒用過 而且也沒見過char p 就忽略了學習這個東西 char p char p 這兩個p 都是字串首位址 char p char p 也都是乙個p指向乙個指標 首位址 栗子 char p 5 就是5個 字串 每乙個p i 是乙個字串 char p...

講一下我自己理解的「賦值「,「淺拷貝」,「深拷貝」

今天來講一下我自己理解的 賦值 淺拷貝 深拷貝 1.賦值 賦值 賦值只是將a的引用賦值給了b a 1,2,3,4,5 b a print a 執行結果 1,2,3,4,5 6 a如上面所有,a只是將b的引用給了b,而b在尾部新增了乙個元素6則會影響到a。這也是 網上 物件賦值實際上是物件的引用 的體...

再來理解一下硬碟

正文開始 一 我的磁碟引數 我們知道硬碟裡面重要的幾個概念 磁頭 head 柱面 cylinder 扇區 sector 下圖是我電腦的這幾項的資料,用diskgenius檢視的 共有60801個柱面,255個磁頭,每道扇區數63個,總扇區數 976773168,這裡說明兩點 1 磁頭數為奇數 我們知...