真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

Python引用、賦值、復制的方法是什么

這篇文章主要介紹“Python引用、賦值、復制的方法是什么”,在日常操作中,相信很多人在Python引用、賦值、復制的方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python引用、賦值、復制的方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

目前成都創(chuàng)新互聯(lián)已為1000多家的企業(yè)提供了網站建設、域名、網絡空間、網站運營、企業(yè)網站設計、寶坻網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

問題:在Python中,令values=[0,1,2];values[1]=values,為何結果是[0,[...],2]?

>>> values = [0, 1, 2]
>>> values[1] = values
>>> values[0, [...], 2]


預想應當是 

[0, [0, 1, 2], 2]

以下是回答

Python 沒有賦值,只有引用。你這樣相當于創(chuàng)建了一個引用自身的結構,所以導致了無限循環(huán)。為了理解這個問題,有個基本概念需要搞清楚。

Python 沒有「變量」,我們平時所說的變量其實只是「標簽」。執(zhí)行

values = [0, 1, 2]

的時候,Python 做的事情是首先創(chuàng)建一個列表對象 [0, 1, 2],然后給它貼上名為 values 的標簽。如果隨后又執(zhí)行

values = [3, 4, 5]

的話,Python 做的事情是創(chuàng)建另一個列表對象 [3, 4, 5],然后把剛才那張名為 values 的標簽從前面的 [0, 1, 2] 對象上撕下來,重新貼到 [3, 4, 5] 這個對象上。

至始至終,并沒有一個叫做 values 的列表對象容器存在,Python 也沒有把任何對象的值復制進 values 去。過程如圖所示

Python引用、賦值、復制的方法是什么

執(zhí)行

values[1] = values

的時候,Python 做的事情則是把 values 這個標簽所引用的列表對象的第二個元素指向 values 所引用的列表對象本身。執(zhí)行完畢后,values 標簽還是指向原來那個對象,只不過那個對象的結構發(fā)生了變化,從之前的列表 [0, 1, 2] 變成了 [0, ?, 2],而這個 ? 則是指向那個對象本身的一個引用。如圖所示

Python引用、賦值、復制的方法是什么

要達到你所需要的效果,即得到 [0, [0, 1, 2], 2] 這個對象,你不能直接將 values[1] 指向 values 引用的對象本身,而是需要吧 [0, 1, 2] 這個對象「復制」一遍,得到一個新對象,再將 values[1] 指向這個復制后的對象。Python 里面復制對象的操作因對象類型而異,復制列表 values 的操作是

values[:]

所以你需要執(zhí)行

values[1] = values[:]

Python 做的事情是,先 dereference 得到 values 所指向的對象 [0, 1, 2],然后執(zhí)行 [0, 1, 2][:] 復制操作得到一個新的對象,內容也是 [0, 1, 2],然后將 values 所指向的列表對象的第二個元素指向這個復制二來的列表對象,最終 values 指向的對象是 [0, [0, 1, 2], 2]。過程如圖所示:

Python引用、賦值、復制的方法是什么

往更深處說,values[:] 復制操作是所謂的「淺復制」(shallow copy),當列表對象有嵌套的時候也會產生出乎意料的錯誤,比如

a = [0, [1, 2], 3]
b = a[:]
a[0] = 8
a[1][1] = 9

問:此時 a 和 b 分別是多少?

正確答案是 a 為 [8, [1, 9], 3],b 為 [0, [1, 9], 3]。發(fā)現(xiàn)沒?b 的第二個元素也被改變了。想想是為什么?不明白的話看下圖

Python引用、賦值、復制的方法是什么

正確的復制嵌套元素的方法是進行「深復制」(deep copy),方法是

import copy

a = [0, [1, 2], 3]
b = copy.deepcopy(a)
a[0] = 8
a[1][1] = 9

Python引用、賦值、復制的方法是什么

到此,關于“Python引用、賦值、復制的方法是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
網頁標題:Python引用、賦值、復制的方法是什么
網頁網址:http://weahome.cn/article/pcjpjj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部