Python:列表、元組、集合、字典,數據類型之間的 5 個差異
- 1. 相同點
- 2. 不同點
- 2.1 排序
- 2.2 索引
- 2.3 可變性
- 2.5 允許的類型
- 2.4 允許重復
- 源碼
這篇博客將介紹列表、元組、集合、字典(lists, tuples, sets, and dictionaries)數據類型的5個差異;包括:order排序、index索引、 Mutability可變性、Duplicates Allowed允許重復、Types Allowed 允許的類型
1. 相同點
- 都可以存儲多個值,唯一差別是括起來的特殊符號
2. 不同點
五個關鍵差異使每種數據類型都以某種方式有所幫助。差異基于:-order排序、index索引、 Mutability可變性、Duplicates Allowed允許重復、Types Allowed 允許的類型。
2.1 排序
列表、元組和字典是有序的。 set是無序的。 注意:Python 3.7 之前的字典是無序的。
2.2 索引
從一組元素中訪問單個元素稱為索引。可以使用方括號并在其中提及索引值(從 0 開始)來完成索引。索引指定數據類型是否可以索引。
列表和元組可以建立索引。 set無法建立索引。 字典的鍵類似于索引。
2.3 可變性
可變性指定數據類型的值最初是否可以修改。它將數據類型分為可變和不可變。
列表、set和字典是可變的并且可以修改。元組是不可變的并且不能被修改。
注意:set值不能修改。但可以添加或刪除值。由于同一內存位置發生更改,它仍然被認為是可變的。
字典的值是可變的,key是不可變的,但可以增加刪除key;
2.5 允許的類型
某些數據類型允許可變值和不可變值,但某些類型僅允許其中的不可變值。數據類型可以基于此進行分類。
2.4 允許重復
另一個關鍵區別是檢查類型是否允許重復其元素。
列表和元組允許重復值。 set不允許重復值。如果嘗試輸入重復項,它將只接受一個值并忽略重復項。
字典允許在其值中出現重復項,但不允許在其鍵中出現重復項。鍵必須是唯一的。
列表和元組允許可變和不可變值。 set只允許不可變的值。一個set甚至不能包含另一個set。
字典只允許鍵中存在不可變類型。字典值可以是可變的和不可變的。
源碼
# lists, tuples, sets, and dictionaries差別
# python python_collections.py# 1. 都可以存儲多個值,唯一差別是括起來的特殊符號
# 2. 主要差異 五個關鍵差異使每種數據類型都以某種方式有所幫助。差異基于:-order排序、index索引、 Mutability可變性、Duplicates Allowed允許重復、Types Allowed 允許的類型。def printA(li, tp, st, di):print(li)print(tp)print(st)print(di)print()li = [1, 2, 3, 4] # Lists use []
tp = (1, 2, 3, 4) # Tuples use ()
st = {1, 2, 3, 4} # Sets use {}
di = {1: 10, 2: 20} # Dictionaries use {} but contain key:value pairs
printA(li, tp, st, di)## 2.1 排序:列表、元組和字典是有序的。 set是無序的。 注意:Python 3.7 之前的字典是無序的。
li = ['A', 'B', 'C']
tp = ('A', 'B', 'C')
st = {'A', 'B', 'C'}
di = {'A': 10, 'B': 20, 'C': 30}
printA(li, tp, st, di)## 2.2 索引:從一組元素中訪問單個元素稱為索引。可以使用方括號并在其中提及索引值(從 0 開始)來完成索引。索引指定數據類型是否可以索引。列表和元組可以建立索引。 set無法建立索引。 字典可以設置鍵,因為它們有鍵和值。但它類似于索引。
li = ['A', 'B', 'C']
tp = ('A', 'B', 'C')
di = {'A': 10, 'B': 20, 'C': 30}print(li[0])
print(tp[1])
print(di['C'])## 2.3 可變性 可變性指定數據類型的值最初是否可以修改。它將數據類型分為可變和不可變。 列表、set和字典是可變的并且可以修改。元組是不可變的并且不能被修改。 注意:set值不能修改。但可以添加或刪除值。由于同一內存位置發生更改,它仍然被認為是可變的。
# 可變類型
li = ['A', 'B', 'C']
li[0] = 'D'print(li)# 不可變類型
tp = ('A', 'B', 'C')
# tp[0] = 'D'
# TypeError: 'tuple' object does not support item assignment## 2.4 允許重復 另一個關鍵區別是檢查類型是否允許重復其元素。 列表和元組允許重復值。 set不允許重復值。如果您嘗試輸入重復項,它將只接受一個值并忽略重復項。 字典允許在其值中出現重復項,但不允許在其鍵中出現重復項。鍵必須是唯一的。
li = ['A', 'B', 'C', 'A']
tp = ('A', 'B', 'C', 'A')
st = {'A', 'B', 'C', 'A'}
di = {'A': 10, 'B': 20, 'C': 10}printA(li, tp, st, di)# 使用相同的key取最后一個設置的值
di = {'A': 10, 'B': 20, 'A': 20}
print(di)## 2.5 允許的類型 某些數據類型允許可變值和不可變值,但某些類型僅允許其中的不可變值。數據類型可以基于此進行分類。
# 列表和元組允許可變和不可變值。 set只允許不可變的值。這意味著由于其可變性,一個set甚至不能包含另一個set。字典只允許鍵中存在不可變類型。字典值可以是可變的和不可變的。
li = [(30, 40), [10, 20]]
tp = ((30, 40), [10, 20])print(li)
print(tp)# set不可變,但可以插入/移除元素;
# 該錯誤表明set不可散列unhashable。所有不可散列類型都是可變的,所有可散列類型都是不可變的。
# st = {10, 20, {30, 40}}
# print(st)
# TypeError: unhashable type: 'set'# Dict同理,值可變,key不可變;
# di = {'A': [10], [2]: 'B'}
# print(di)
# TypeError: unhashable type: 'list'