类型 | 索引 | 可变性 | 重复性 | 举例 | 可变性实验 | |
Number(数字) | a,b,c,d=20,5,5 | |||||
String(字符串) | str-=“hello world” 注意:[0,2]是0到1,不包括2. | |||||
List[列表] | [] | √ | 可变 | √ | li = [1, 2, 3, 4] | |
Tuple(元组) | () | √ | √ | tuple=('abcd',786,2.23,'hello') | tp = ('A', 'B', 'C') tp[0] = 'D' | |
Set {集合} | {} | × | 可变,无序,set值不可改但可增删 | ×只接受一个值,会忽略重复项 | set={'tom','jim','mary'} | st = {10, 20, {30, 40}} print(st) |
Dictionary{字典} | {} | × 但有键 | 可变,Python3.7之前是无序,值可变键不可变,但可以增删key | 键不可重复,不然不是xy对应了。相同的key取最后一个设置的值 | di = {1: 10, 2: 20} | Dict同理,值可变,key不可变; di = {'A': [10], [2]: 'B'} print(di) |
以下代码来自:
Python:列表、元组、集合、字典,数据类型之间的 5 个差异_简述列表、元组、字典、集合类型的异同。-CSDN博客
# 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'