亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

python不可變對象是什么

發布時間:2020-11-21 14:08:21 來源:億速云 閱讀:301 作者:小新 欄目:編程語言

這篇文章主要介紹python不可變對象是什么,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

在python對象分類中已經 介紹了python不可變對象,下面將列舉實例,詳細分析:

不可變類型(數字,字符串,元組,不可變集合):不支持原處修改。

引用

>>> a=345  
>>> b=a  
>>> a is b  
True  
>>>

在python一切皆是對象,而對象是通過引用傳遞的。在賦值時,不管這個對象是新創建的,還是一個已經存在的,都是將該對象的引用賦值給變量。故這里a實際上和b是同一個對象,a is b為true!

數字類型(以int型為例)

一般,嘗試修改數字對象,實際上是新建一個數字對象,如下所示。

#新建數字對象1000
>>> id(1000)
53060472L

#新建數字對象1000
>>> y = 1000
>>> id(y)
53060328L

#嘗試操作修改數字對象,實際上生成新的數字對象
>>> y = y + 1
>>> y
>>> id(y)
53058744L

(1)但有一個特例,對于小整數[-5, 256]。考慮到小整數可能頻繁使用,出于性能考慮,Python使用小整數對象緩沖池small_ints緩存了[-5,257)之間的整數,該范圍內的整數在Python系統中是共享的。小整數對象在py啟動過程中初始化,這些個小整數對象的ob_refcnt不會改變且永遠>0,所以在vm運行過程中不會被銷毀,所以起到了緩沖的作用。

(2)對于超出了[-5, 257)之間的其他整數,Python同樣提供了專門的緩沖池(通用整數對象的緩沖池),供這些所謂的大整數使用,避免每次使用的時候都要不斷的malloc分配內存帶來的效率損耗。通過free-list,管理空閑空間。

(3)Python中的int對象就是c語言中long類型數值的擴展。

(4)整數對象回收時,內存并不會歸還給系統,而是將其對象的ob_type指向free_list,供新創建的對象使用。

字符串類型

比如對于不可變對象str,進行操作:

>>> a = 'abc'
>>> id(a)
52053576L

#引用新生成的對象
>>> b = a.replace('a','A')
>>> id(b)
47950704L
>>> id(a)
52053576L
>>> b
'Abc'

要始終牢記的是,a是變量,而'abc'才是字符串對象!有些時候,我們經常說,對象a的內容是'abc',但其實是指,a本身是一個變量,它指向的對象的內容才是'abc'。

tuple(元組)

當你定義一個tuple時,在定義的時候,tuple的元素就必須被確定下來。

最后來看一個“可變的”tuple:

>>> t = ('a', 'b', ['A', 'B'])
>>> t
('a', 'b', ['A', 'B'])
>>> hash(t)
Traceback (most recent call last):
  File "<pyshell#179>", line 1, in <module>
    hash(t)
TypeError: unhashable type: 'list'
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

表面上看,tuple的元素確實變了,但其實變的不是tuple的元素,而是list的元素。tuple一開始指向的list并沒有改成別的list,所以,tuple所謂的“不變”是說,tuple的每個元素,指向永遠不變。即指向'a',就不能改成指向'b',指向一個list,就不能改成指向其他對象,但指向的這個list本身是可變的!

理解了“指向不變”后,要創建一個內容也不變的tuple怎么做?那就必須保證tuple的每一個元素本身也不能變。

以上是python不可變對象是什么的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

沾益县| 乌海市| 二连浩特市| 施甸县| 宜川县| 新干县| 唐山市| 东光县| 高州市| 临洮县| 长丰县| 阳西县| 哈密市| 额尔古纳市| 华容县| 乡城县| 阿克陶县| 丹阳市| 登封市| 松潘县| 瓮安县| 波密县| 山东| 桑日县| 合川市| 阳春市| 吉安县| 文登市| 延寿县| 清原| 策勒县| 四川省| 柳河县| 盘山县| 康马县| 于都县| 固原市| 开封县| 申扎县| 邢台市| 孟州市|