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)
相反的,該類型的對象可以通過操作直接改變,而不需要創建一個新對象,儘管這類對象也支持複製,但可變類型的對象可以直接修改。