python 深淺拷貝

2022-09-05 11:06:10 字數 2249 閱讀 4880

一、賦值操作

=  賦值

lst1 = ["

⾦⽑獅王

", "

紫衫⻰王

", "

⽩眉鷹王

", "

⻘翼蝠王"]

lst2 =lst1

print

(lst1)

print

(lst2)"楊逍

")print

(lst1)

print

(lst2)

結果:[

'⾦⽑獅王

', '

紫衫⻰王

', '

⽩眉鷹王

', '

⻘翼蝠王

', '楊逍'

]['⾦⽑獅王

', '

紫衫⻰王

', '

⽩眉鷹王

', '

⻘翼蝠王

', '

楊逍']

dic1 = 

dic2 =dic1

print

(dic1)

print

(dic2)

dic1[

'name

'] = "範瑤"

print

(dic1)

print

(dic2)

結果:

對於list、set、dict來說,直接賦值操作,其實就是把記憶體位址交給對方,並不是複製乙份,所以他們的記憶體位址都一樣,乙個改變,就都會更改。

二、淺拷貝

淺拷貝:只會拷貝第一層,不會拷貝第二層lst1 = ["

何炅", "

杜海濤","

周渝⺠"

]

lst2 =lst1.copy()

"李嘉誠")

print

(lst1)

print

(lst2)

print

(id(lst1), id(lst2))

結果:兩個lst完全不⼀樣. 記憶體位址和內容也不⼀樣. 發現實現了記憶體的拷⻉

#此題有坑,只會拷貝第一層資料,列表共用了同乙個記憶體位址

lst1 = ["

何炅", "

杜海濤","

周渝⺠", ["

麻花藤", "

⻢芸", "

周筆暢"

]]lst2 =lst1.copy()

⽆敵是多磨寂寞")

print

(lst1)

print

(lst2)

print(id(lst1[3]), id(lst2[3]))

結果:['何炅

', '

杜海濤', '

周渝⺠', ['

麻花藤', '

⻢芸', '

周筆暢', '

⽆敵是多磨寂寞']]

['何炅', '

杜海濤', '

周渝⺠', ['

麻花藤', '

⻢芸', '

周筆暢', '

⽆敵是多磨寂寞

'

三、深拷貝

1、匯入拷貝模組 : import copy   copy.deepcopy( )

2、拷貝物件的全部內容,有多少層就從新建立多少層,各不干擾

import copylst1 = ["

何炅", "

杜海濤","

周渝⺠", ["

麻花藤", "

⻢芸", "

周筆暢"

]]lst2 =copy.deepcopy(lst1)

⽆敵是多磨寂寞")

print

(lst1)

print

(lst2)

print(id(lst1[3]), id(lst2[3]))

結果:['何炅

', '

杜海濤', '

周渝⺠', ['

麻花藤', '

⻢芸', '

周筆暢', '

⽆敵是多磨寂寞']]

['何炅', '

杜海濤', '

周渝⺠', ['

麻花藤', '

⻢芸', '

周筆暢'

小面試題:

a = [1, 2]

a[1] =a

print(a[1])

結果

[1,[...]]

python 深淺拷貝案例 python 深淺拷貝

深淺拷貝 對於 數字 和 字串 而言,賦值 淺拷貝和深拷貝無意義,因為其永遠指向同乙個記憶體位址 import copy a1 22255 a2 22255 print id a1 id a2 3428240 3428240 對於字典 元祖 列表 而言,進行賦值 淺拷貝和深拷貝時,其記憶體位址的變化...

python 深淺拷貝

建立乙個寬度為3,高度為4的陣列 mylist 0 3 4 0,0,0 0,0,0 0,0,0 0,0,0 但是當操作mylist 0 1 1時,發現整個第二列都被賦值,變成 0,1,0 0,1,0 0,1,0 0,1,0 list n n shallow copies of list concat...

python深淺拷貝

python 深淺拷貝 shallow copy 和 deep copy 對於乙個列表,列表裡面可以再放入乙個列表 1 若想複製這乙個列表,使用列表的普通的copy 方法,只能拷貝出列表裡表層的元素,而列表裡的列表卻無法拷貝,只能指向前乙個列表.修改拷貝出的列表裡列表裡的元素,原來的列表會發生改變....