Python 之深拷貝與淺拷貝

2021-10-24 11:33:23 字數 1208 閱讀 3033

變數最終是儲存於記憶體中的,儲存於記憶體內的一塊空間之中

深拷貝是將記憶體中a類(指標類)指向最終的值,複製到其他記憶體區塊中

淺拷貝只是複製指標,指向記憶體區塊

import copy

deffun3()

:print

("深拷貝 淺拷貝(預設)"

) alist =[1

,2,3

,["a",

"b"]

]# 淺拷貝

c = copy.copy(alist)

# 深拷貝

d = copy.deepcopy(alist)

# 普通賦值

e = alist

print(id

(alist)

)print(id

(c))

print(id

(d))

print(id

(e))

print

(alist is c)

print

(alist is d)

print

(alist is e)

print

("----- 接下來看神操作"

)# a = ["3"]

# a = "3"

a =3# b = a

b = copy.deepcopy(a)

# b= copy.copy(a)

print(id

(a))

print(id

(b))

print

(a is b)

''' 所以綜上所述,對於數字和字串的賦值、淺拷貝、深拷貝在記憶體當中用的都是同一塊位址。

對於淺拷貝,字典、列表、元組等型別,它們只拷貝第一層位址

對於深拷貝,它會拷貝多層,

將第二層的列表也拷貝乙份,如果還有第三層巢狀,那麼第三層的也會拷貝,

但是對於裡面的最小元素

比如數字和字串等基礎型別

按照python的機制,它們會共同指向同乙個位置,它的記憶體位址是不會變的。

區別於淺拷貝只拷貝頂層引用,深拷貝會逐層進行拷貝,直到拷貝的所有引用都是不可變引用為止。

id() 函式就是返回物件的記憶體位址

is 是比較兩個變數的物件引用是否指向同乙個物件

不要和 == 混了,== 是比較兩個變數的值是否相等

'''

python之深拷貝 淺拷貝

來自於牛客網,刷題時候遇到的 題目 下面 執行後,a b c d四個變數的值,描述錯誤的是?import copy a 1,2,3,4,a b b a c copy.copy a d copy.deepcopy a 5 選項 a 1,2,3,4,a b c 5 b 1,2,3,4,a b c 5 c...

python之深拷貝 淺拷貝

如上圖,變數a和b的記憶體位址是相同的,說明python中的賦值可以看作是引用,變數指向了同乙個記憶體空間 copy模組中的deepcopy就展示了深拷貝,c就是通過a的深拷貝 測試一下,追加a列表,c並沒有發生變化,c指向的是乙個新的記憶體空間 這段 是要說明copy模組下的copy是淺拷貝,但是...

Python 淺拷貝與深拷貝

淺拷貝 構造方法或切片 做的是淺拷貝 即拷貝了最外層容器,副本中的元素是原容器中元素的引用 在 python 中,通過乙個物件向另外乙個物件賦值,實際僅僅是賦值了物件的引用,而非建立乙個物件並賦值。那如何真正拷貝物件呢?我們看一下兩種不同的拷貝方式。先從乙個示例看起 anndy anndy age ...