Python 中四大核心容器类型 —— 列表(list)、元组(tuple)、字典(dict)、集合(set) 的关键区别,特性、用途和适用场景。
📊 Python 四大容器类型横向对比表
| 特性 / 容器 | 列表 list | 元组 tuple | 字典 dict | 集合 set |
|---|---|---|---|---|
| 定义方式 | [1, 2, 'a'] | (1, 2, 'a') 或 1, 2, 'a' | {'name': 'Tom', 'age': 20} 或 dict(name='Tom') | {1, 2, 3} 或 set([1,2,3]) |
| 是否有序 | ✅ 是(按插入顺序) | ✅ 是(不可变,顺序固定) | ✅ 是(Python 3.7+ 保证插入顺序) | ❌ 否(无序,元素位置不固定) |
| 是否可变 | ✅ 可变(可增删改) | ❌ 不可变(创建后不能修改) | ✅ 可变(可增删改键值对) | ✅ 可变(可增删元素) |
| 元素是否唯一 | ❌ 允许重复 | ❌ 允许重复 | ✅ 键(key)必须唯一 值(value)可重复 | ✅ 元素必须唯一(自动去重) |
| 元素类型要求 | 任意类型,可混合 | 任意类型,可混合 | 键必须是不可变类型(如 str, int, tuple) 值任意 | 元素必须是不可变类型(如 str, int, tuple) |
| 是否支持索引 | ✅ 支持 lst[0] | ✅ 支持 tup[0] | ❌ 不支持索引 ✅ 通过键访问: d['name'] | ❌ 不支持索引(无序) |
| 是否支持切片 | ✅ 支持 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
| 常用操作 | append, pop, sort, len, sum | index, count, 解包 | keys(), values(), items(), get() | add, remove, union, intersection |
| 典型用途 | 存储有序、可变的数据序列 (如成绩、日志、队列) | 存储不可变、结构固定的数据 (如坐标 (x,y)、RGB 颜色) | 存储键值映射关系 (如用户信息、配置项) | 去重、成员检测、数学集合运算 (如标签去重、交集/并集) |
| 性能特点 | 尾部增删快,中间插入慢 | 创建快,访问快,内存小 | 查找/插入/删除平均 O(1)(哈希表) | 成员检测 O(1),去重高效 |
| 是否可哈希 | ❌ 不可作为 dict 的 key 或 set 的元素 | ✅ 可哈希(若元素都可哈希) | ❌ 不可哈希 | ❌ 不可哈希(但 frozenset 可哈希) |
| 空容器写法 | [] 或 list() | () 或 tuple() | {} 或 dict() | set()(⚠️ {} 是空字典!) |
🔍 关键点解析(新手易错)
1. 空集合 vs 空字典
s = {} # ❌ 这是空字典!
s = set() # ✅ 这才是空集合2. 元组的“陷阱”
t = (5) # ❌ 这是整数 5,不是元组!
t = (5,) # ✅ 单元素元组必须加逗号3. 字典的键必须可哈希
d = {[1,2]: "error"} # ❌ 报错!列表不可哈希
d = {(1,2): "ok"} # ✅ 元组可哈希,合法4. 集合自动去重
s = {1, 2, 2, 3}
print(s) # {1, 2, 3}5. 字典有序性
- Python 3.6(CPython)开始有序,3.7+ 成为语言标准,可放心依赖插入顺序。
🧠 快速选择指南(根据需求选容器)
| 你的需求 | 推荐容器 |
|---|---|
| 要一个能随时增删改的序列 | list |
| 数据结构固定,不想被修改(安全/性能) | tuple |
| 用名字/ID 快速查找对应值 | dict |
| 去除重复项,或做交集/并集运算 | set |
| 需要作为字典的 key 或集合的元素 | tuple(且元素都不可变) |
💡 一句话记忆口诀:
- 列表:有序可变,啥都能装
- 元组:有序不可变,安全又省空间
- 字典:键值对,查得快,键要唯一且不可变
- 集合:无序唯一,去重神器,支持数学运算