Python中的對象之間有聯系也有區分,如字元串和清單都可以執行切片、索引等操作,說明字元串和清單之間是有關系的,那麼理清這些關系有助于我們更好的了解python。
我們知道,字元串是不可變類型(immutable)的序列(sequences):字元串不能夠在記憶體中直接改變(例如:
>>> 'python'[0] = m
這個操作并不能夠改變python這個字元串對象,不可變性是不可變類型的屬性);字元串是有序的按位置排列的集合體(collections),可以通過偏移量通路其中的不同部分(序列類型的屬性)。相同的類型之間有共同的屬性,他們可以執行一些相同的操作,就像字元串和清單一樣。
分類圖:
類型
數字:(整數、浮點數、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)
相反的,該類型的對象可以通過操作直接改變,而不需要建立一個新對象,盡管這類對象也支援複制,但可變類型的對象可以直接修改。