Python基礎(五) 列表的深淺複製

2022-08-27 19:42:08 字數 2282 閱讀 4019

首先我們需要明確列表的深淺複製是針對被巢狀的列表而言的,也就是說只有對巢狀列表我們才需要考慮這個問題。來看例子。

list1=['

老大','

老二',['

老三','

老四','

老五'],'

老六','老七'

]list2=list1.copy()

print(list1,'

\n',list2) #

列印兩個列表

print(id(list1),'

\n',id(list2)) #

列印兩個列表的位址

print(id(list1[2]),'

\n',id(list2[2])) #

列印兩個巢狀列表的位址

執行結果

['

老大', '

老二', ['

老三', '

老四', '

老五'], '

老六', '老七'

] ['老大

', '

老二', ['

老三', '

老四', '

老五'], '

老六', '老七'

]3072878348

3072561644

3072841164

3072841164

從結果中可以看出,雖然list1與liat2的位址相同,但是巢狀的列表['老三', '老四', '老五']卻有著相同的位址。這就是一種淺複製。如果此時我們修改巢狀列表的值。兩個列表就都會發生改變。看下面的**。

list1[2][1]='

哈哈哈'

print(list1,'

\n',list2)

執行結果

['

老大', '

老二', ['

老三', '

哈哈哈', '

老五'], '

老六', '老七'

] ['老大

', '

老二', ['

老三', '

哈哈哈', '

老五'], '

老六', '

老七']

其實原理非常簡單,中間被巢狀的列表實際上是單獨被分配的空間,然後list1和list2都是去引用的位址,所以當它的值改變,兩個列表就都跟著變了。

深複製需要用到copy模組,來看例子。

import

copy

list1=['

老大','

老二',['

老三','

老四','

老五'],'

老六','老七'

]list2=copy.deepcopy(list1)

print(list1,'

\n',list2) #

列印兩個列表

print(id(list1),'

\n',id(list2)) #

列印兩個列表的位址

print(id(list1[2]),'

\n',id(list2[2])) #

列印兩個巢狀列表的位址

結果

['

老大', '

老二', ['

老三', '

老四', '

老五'], '

老六', '老七'

] ['老大

', '

老二', ['

老三', '

老四', '

老五'], '

老六', '老七'

]3071562732

3071928940

3071600076

3071600108

這是我們如果修改巢狀的列表的值,兩個列表會發生什麼變化呢?

list1[2][1]='

哈哈哈'

print(list1,'

\n',list2)

結果

['

老大', '

老二', ['

老三', '

哈哈哈', '

老五'], '

老六', '老七'

] ['老大

', '

老二', ['

老三', '

老四', '

老五'], '

老六', '

老七']

Python 列表深淺複製詳解

列表有個 copy 方法,意思是複製乙個相同的列表 實現淺複製的方法 import copy names 小明 小紅 小黑 小黃 小白 names1 copy.copy names names2 names names3 list names 深複製的方法 import copy names 小明 ...

Python列表深淺複製詳解

在文章 python 資料型別 裡邊介紹了列表的用法,其中列表有個 copy 方法,意思是複製乙個相同的列表。例如 1 names 小明 小紅 小黑 小黃 小白 2 把 names 複製,賦值給 names2 變數 3 names2 names.copy 4 分別輸出 names names2 5 ...

python深淺複製 Python中的深淺拷貝

1.什麼是深淺拷貝?python中一切皆物件,python中的數字 字串 元組等,如果存放在了記憶體中,這部分記憶體裡面的內容是不會改變的,但是也有情況,記憶體中存放了可變物件,比如說列表和字典,他們的記憶體空間是可以被修改的。下面我們定義乙個列表 list 1,2,3,4,5 list1 list...