Learning Python 之 Python中的對象分類

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

我們知道,字符串是不可變類型(immutable)的序列(sequences):字符串不能夠在內存中直接改變(例如:>>> 'python'[0] = m這個操作並不能夠改變python這個字符串對象,不可變性是不可變類型的屬性);字符串是有序的按位置排列的集合體(collections),可以通過偏移量訪問其中的不同部分(序列類型的屬性)。相同的類型之間有共同的屬性,他們可以執行一些相同的操作,就像字符串和列表一樣。

分類圖:

這裏寫圖片描述

類型

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

支持加減等操作

序列:(字符串、列表和元組)

支持索引、切片、連接等

映射mappings:(字典)

支持通過鍵值索引等

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

可變性(Mutable?)

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

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

這兩類的具體劃分:

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

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

可變類型:(列表、字典、集合和bytearray)

相反的,該類型的對象可以通過操作直接改變,而不需要創建一個新對象,儘管這類對象也支持複製,但可變類型的對象可以直接修改。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章