Python 的基本數(shù)據(jù)類型
數(shù)字
字符串
元組
列表
字典
集合
根據(jù)不同的特性,有 3 種模型可以幫我們對(duì) Python 的數(shù)據(jù)類型進(jìn)行分類。根據(jù)不同的模型進(jìn)行分類可以幫助我們更好的了解數(shù)據(jù)類型的工作原理及不同數(shù)據(jù)類型之間的關(guān)系。
另外需要注意的是,數(shù)據(jù)類型指的是對(duì)象的數(shù)據(jù)類型,而非變量。在 Python 中變量不存在數(shù)據(jù)類型的概念。
1. 存儲(chǔ)模型
簡(jiǎn)單來說存儲(chǔ)模型即通過數(shù)據(jù)類型所能存儲(chǔ)對(duì)象的數(shù)量來進(jìn)行分類。
標(biāo)量/原子類型:可以存儲(chǔ)單個(gè)對(duì)象的類型
容器類型:可以存儲(chǔ)多個(gè)對(duì)象的類型。在 Python 中,所有的容器對(duì)象都可以存儲(chǔ)不同數(shù)據(jù)類型的對(duì)象
分類 | 數(shù)據(jù)類型 |
---|---|
標(biāo)量/原子類型 | 數(shù)字、字符串 |
容器類型 | 元組、列表、字典、集合 |
盡管字符串通常包含多于 1 個(gè)字符,但字符串屬于標(biāo)量類型,一個(gè)字符串視為一個(gè)整體。
2. 更新模型
更新模型是指在對(duì)象創(chuàng)建以后,它的值是否可以更新。
分類 | 數(shù)據(jù)類型 |
---|---|
可變類型 | 列表、字典、可變集合 |
不可變類型 | 數(shù)字、字符串、元組、不可變集合 |
需要注意的是:
- 當(dāng)對(duì)數(shù)字、字符串等變量重新賦值時(shí),實(shí)際上是創(chuàng)建了新的對(duì)象,并更新變量的引用
>>> a = 1
>>> id(a)
39259240
>>> a = 2
>>> id(a)
39259216 # 變量 a 在重新賦值以后指向的內(nèi)存地址發(fā)生改變
- 由于元組屬于容器,因此元組中的元素可能是列表等可變對(duì)象,當(dāng)元組中某一可變?cè)匕l(fā)生變化時(shí),元組事實(shí)上確實(shí)發(fā)生了變化。但我們?nèi)匀徽J(rèn)為元組是不可變的。
>>> a = (1, 2, [3])
>>> id(a)
140200782961952
>>> a[2] = 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> a[2][0] = 2
>>> a
(1, 2, [2])
>>> id(a)
140200782961952 #元組中的列表確實(shí)發(fā)生了改變
- Python 中集合分兩種:可變集合(set)和不可變集合(frozenset)。可變集合不可哈希,不可變集合可哈希。
>>> a = set('a')
>>> hash(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
>>> b = frozenset('b')
>>> hash(b)
-1475720110065259131
3. 訪問模型
訪問模型是根據(jù)訪問數(shù)據(jù)對(duì)象的方式不同進(jìn)行分類。
分類 | 數(shù)據(jù)類型 |
---|---|
直接訪問 | 數(shù)字 |
順序訪問 | 字符串、元組、列表 |
映射訪問 | 字典 |
- 順序訪問是指,在對(duì)象內(nèi)部從 0 開始進(jìn)行索引,通過索引、切片進(jìn)行一個(gè)或多個(gè)元素的訪問
>>> a = 'test'
>>> a[0]
't'
>>> a[0:2]
'te'
- 映射訪問將順序訪問的數(shù)字索引更改為唯一的鍵(key),通過對(duì) key - value 的映射來對(duì)元素進(jìn)行訪問。它的元素是無序的。
>>> a = {'a':1, 'b':2}
>>> a['a']
1
>>> a['b']
2
- 由于集合本身是無序的,且無法創(chuàng)建索引,因此對(duì)集合的訪問只能通過循環(huán)遍歷或使用 'in' 、 'not in' 來判斷元素是否屬于集合
數(shù)據(jù)類型分類
數(shù)據(jù)類型 | 存儲(chǔ)模型 | 更新模型 | 訪問模型 |
---|---|---|---|
數(shù)字 | 標(biāo)量 | 不可變 | 直接訪問 |
字符串 | 標(biāo)量 | 不可變 | 順序訪問 |
元組 | 容器 | 不可變 | 順序訪問 |
列表 | 容器 | 可變 | 順序訪問 |
字典 | 容器 | 可變 | 映射訪問 |
集合 | 容器 | 可變/不可變 |