天天看點

Learning Python 之 Python中的對象分類分類圖:類型可變性(Mutable?)

Python中的對象之間有聯系也有區分,如字元串和清單都可以執行切片、索引等操作,說明字元串和清單之間是有關系的,那麼理清這些關系有助于我們更好的了解python。

我們知道,字元串是不可變類型(immutable)的序列(sequences):字元串不能夠在記憶體中直接改變(例如:

>>> 'python'[0] = m

這個操作并不能夠改變python這個字元串對象,不可變性是不可變類型的屬性);字元串是有序的按位置排列的集合體(collections),可以通過偏移量通路其中的不同部分(序列類型的屬性)。相同的類型之間有共同的屬性,他們可以執行一些相同的操作,就像字元串和清單一樣。

分類圖:

Learning Python 之 Python中的對象分類分類圖:類型可變性(Mutable?)

類型

數字:(整數、浮點數、decimal、分數等)

支援加減等操作
           

序列:(字元串、清單和元組)

支援索引、切片、連接配接等
           

映射mappings:(字典)

支援通過鍵值索引等
           

值得注意的是,集合(sets)即不是序列,它是無序的;也不是映射,它不支援鍵值索引,它自成一類(a category unto themselves)。

可變性(Mutable?)

可變類型(Mutable)和不可變類型(Immutable)在Python是一個十分重要的概念。如果一個對象是不可變類型,那麼就不能夠直接改變他的值(可以通過指派覆寫,等于建立了一個新的對象),否則會抛出錯誤,就像這樣:

>>> 'python'[] = 'm'
Traceback (most recent call last):
  File "<stdin>", line , in <module>
TypeError: 'str' object does not support item assignment
           

這兩類的具體劃分:

不可變類型:(數字、字元串、元組和forzensets)

該類型的對象都不支援直接改變内容或本身(cannot in-place change)。如果需要的話我們可以通過建立一個新對象覆寫原來的對象來實作。
           

可變類型:(清單、字典、集合和bytearray)

相反的,該類型的對象可以通過操作直接改變,而不需要建立一個新對象,盡管這類對象也支援複制,但可變類型的對象可以直接修改。