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

來源:互聯網
上載者:User

標籤:div   print   複製   size   中間   相同   修改   地址   lis   

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

list1=[‘老大‘,‘老二‘,[‘老三‘,‘老四‘,‘老五‘],‘老六‘,‘老七‘]list2=list1.copy()print(list1,‘\n‘,list2)                    #列印兩個列表print(id(list1),‘\n‘,id(list2))          #列印兩個列表的地址print(id(list1[2]),‘\n‘,id(list2[2])) #列印兩個嵌套列表的地址

運行結果

[‘老大‘, ‘老二‘, [‘老三‘, ‘老四‘, ‘老五‘], ‘老六‘, ‘老七‘]  [‘老大‘, ‘老二‘, [‘老三‘, ‘老四‘, ‘老五‘], ‘老六‘, ‘老七‘]3072878348  30725616443072841164  3072841164

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

 

list1[2][1]=‘哈哈哈‘print(list1,‘\n‘,list2)

 

運行結果

[‘老大‘, ‘老二‘, [‘老三‘, ‘哈哈哈‘, ‘老五‘], ‘老六‘, ‘老七‘]  [‘老大‘, ‘老二‘, [‘老三‘, ‘哈哈哈‘, ‘老五‘], ‘老六‘, ‘老七‘]

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

深複製

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

import copylist1=[‘老大‘,‘老二‘,[‘老三‘,‘老四‘,‘老五‘],‘老六‘,‘老七‘]list2=copy.deepcopy(list1)print(list1,‘\n‘,list2)    #列印兩個列表print(id(list1),‘\n‘,id(list2))    #列印兩個列表的地址print(id(list1[2]),‘\n‘,id(list2[2])) #列印兩個嵌套列表的地址

結果

[‘老大‘, ‘老二‘, [‘老三‘, ‘老四‘, ‘老五‘], ‘老六‘, ‘老七‘]  [‘老大‘, ‘老二‘, [‘老三‘, ‘老四‘, ‘老五‘], ‘老六‘, ‘老七‘]3071562732  30719289403071600076  3071600108

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

list1[2][1]=‘哈哈哈‘print(list1,‘\n‘,list2)

結果

[‘老大‘, ‘老二‘, [‘老三‘, ‘哈哈哈‘, ‘老五‘], ‘老六‘, ‘老七‘]  [‘老大‘, ‘老二‘, [‘老三‘, ‘老四‘, ‘老五‘], ‘老六‘, ‘老七‘]

 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.