91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

?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

双牌县| 海兴县| 固阳县| 龙陵县| 自治县| 安徽省| 同德县| 泌阳县| 康保县| 海口市| 莫力| 开封县| 横山县| 安义县| 和政县| 昆山市| 韶关市| 兴义市| 巩留县| 张家川| 渑池县| 峨眉山市| 昌吉市| 宁夏| 兰坪| 北川| 商南县| 芦山县| 团风县| 泰宁县| 建平县| 通渭县| 山东省| 保亭| 通化县| 泸定县| 龙南县| 东乡族自治县| 英德市| 新晃| 永丰县|