中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

?Python賦值一切對象皆傳址怎么理解

發布時間:2022-01-17 15:14:16 來源:億速云 閱讀:141 作者:iii 欄目:大數據

本篇內容主要講解“Python賦值一切對象皆傳址怎么理解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python賦值一切對象皆傳址怎么理解”吧!

Python賦值一切對象皆傳址 經常聽到編程語言賦值操作中,有傳引用,傳值等傳遞方式,但在Python中只有傳地址唯一一種方式。舉個例子:

>>> s = [1,2,3]
>>> t = s
>>> t.reverse()

s 和 t的值都變成了[3,2,1],再看:

>>> s = [1,2,3]
>>> t = s[::-1]

s的值是[1,2,3],t的值是[3,2,1],那么問題來了,Python中賦值操作是傳值還是傳地址?

Python一切皆為對象。賦值一直都是傳址。所有變量都是保存著對象的地址。上例子中的第一種情況將s賦值給了t,此時s和t指向了同一個對象。所以執行reverse時,對象本身被改變。因為s和t指向同一個對象,所以你無論輸出s還是t都是輸出同一個已經被reverse的對象。 第二種情況是對s執行了一個切片(slicing)的操作。此時本身s[::-1]返回的不是s指向的那個對象本身,而是一個在內存中根據運算重新生成的對象,所以t指向的是一個s[::-1]生成的新對象的地址。而s還是指向著原來的對象,由于s[::-1]不會改變原來對象的值,所以s的值是不會改變的。

延伸閱讀:

在Python中,即使是整數類型,它也是按照對象來處理的。例如a=1,它并不是將1值賦值給了a,而是將一個整數對象1的地址賦值給了a。由于Python對小整數的特殊處理,凡是在一定范圍內的小整數,是統一使用了“小整數對象池”。也就是說所有的小整數,例如1,都是使用對象池里面的同一個對象。但是,小整數對象池是有限的,范圍是[-5, 257) 注意左閉右開。所以,超過這個范圍的整數,嚴格來說,是需要生成這樣的一個對象的。所以,就會出現下面的情況

>>> a = 1
>>> b = 1
>>> id(a) == id(b)
True

>>> c = 1000000
>>> d = 1000000
>>> id(c) == id(d)
False

而整數對象是一種不可變類型,也就是說,一旦你生成了一個257的整形對象,你這個對象保存的數字就是不能再變化的了。那么我們對整數執行加法的時候,得到的結果和原來的對象是什么關系呢?答案是,沒關系,結果是根據求和數值產生的一個全新的對象。即使全新的對象和原來數值一樣,也是不同的對象(除非數字在小整數對象池內)。例如:

>>> e = c + 0
>>> id(c) == id(e)
False
>>> f = a + 0
>>> id(a) == id(f)
True

而列表類型是一種可變類型。他提供了一些原地改變對象而不用生成新對象的方法,例如s.reverse()。但同時,也可以生成一個新的對象儲存想要的結果,例如s[::-1],或者reversed(s)。PS:注意reverse()和reversed的區別

到此,相信大家對“Python賦值一切對象皆傳址怎么理解”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黄陵县| 普兰店市| 霞浦县| 陇西县| 墨竹工卡县| 遵化市| 大理市| 宁城县| 浦北县| 泽州县| 微山县| 毕节市| 保亭| 连江县| 新化县| 福贡县| 新竹市| 呼和浩特市| 象州县| 保靖县| 亚东县| 庄浪县| 南岸区| 大埔县| 嘉祥县| 仙游县| 昔阳县| 巴塘县| 汝阳县| 泊头市| 金沙县| 新沂市| 长春市| 射洪县| SHOW| 英山县| 泽州县| 赫章县| 玉田县| 汉川市| 德江县|