一文搞懂 Python 的 List, Tuple, Set, Dict 的核心区别与应用场景
·
【Python基础】 一文搞懂 List, Tuple, Set, Dict 的核心区别与应用场景
Python 中有四大内置数据结构:列表(List)、元组(Tuple)、集合(Set)和字典(Dictionary)。它们长得有点像,但在底层实现、可变性、有序性以及应用场景上有着天壤之别。本文通过对比表格和代码示例,带你彻底掌握它们的选择逻辑。
文章目录
1 四种数据类型的区别
| 特性 | List (列表) | Tuple (元组) | Set (集合) | Dictionary (字典) |
|---|---|---|---|---|
| 符号 | [ ] |
( ) |
{ } |
{key: value} |
| 有序性 | 有序 | 有序 | 无序 | Python 3.7+ 有序 (插入顺序) |
| 可变性 | 可变 (Mutable) | 不可变 (Immutable) | 可变 (但元素必须不可变) | 可变 (Key必须不可变) |
| 重复元素 | 允许 | 允许 | 不允许 (自动去重) | Key 不允许重复 |
| 查找速度 | 慢 (O(n)) | 慢 (O(n)) | 极快 (O(1)) | 极快 (O(1)) |
| 主要用途 | 存储序列数据 | 存储不可变序列/记录 | 去重、数学集合运算 | 键值对映射、快速查找 |
1.1 List (列表)
关键词:有序、可变
列表是 Python 中最常用的数据结构。它可以容纳任意类型的对象,并且可以随时修改(增删改)。
- 特点: 元素按插入顺序排列,支持索引(Indexing)和切片(Slicing)。
- 常用操作:
append,extend,pop,sort。
# 定义列表
my_list = [1, "Hello", 3.14, [1, 2]]
# 修改元素
my_list[0] = 100
# 追加元素
my_list.append("World")
print(my_list)
# 输出: [100, 'Hello', 3.14, [1, 2], 'World']
1.2 Tuple (元组)
关键词:有序、不可变、安全
元组可以看作是“只读的列表”。一旦创建,其内部的元素就不能被修改、添加或删除。
- 为什么用元组?
- 安全性: 保护数据不被意外修改。
- 性能: 比列表占用更少的内存,迭代速度略快。
- 可哈希: 因为不可变,所以元组可以作为字典的 Key(列表不行)。
# 定义元组
my_tuple = (1, 2, "Python")
# 尝试修改会报错
try:
my_tuple[0] = 99
except TypeError as e:
print(f"Error: {e}")
# 输出: Error: 'tuple' object does not support item assignment
# 单个元素的元组陷阱
single_tuple = (1,) # 必须加逗号,否则是 int 类型
1.3 Set (集合)
关键词:无序、唯一、数学运算
集合是一个无序的不重复元素序列。它的底层实现与字典类似(Hash Table),因此查找速度极快。
- 核心功能: 自动去重。
- 注意: 集合本身是可变的(可以 add/remove),但集合内的元素必须是不可变的(Hashable)。你不能在集合里放一个 List。
# 定义集合
my_set = {1, 2, 2, 3, 3, 3}
print(my_set) # 输出: {1, 2, 3} (自动去重)
# 集合运算
set_a = {1, 2, 3}
set_b = {3, 4, 5}
print(set_a & set_b) # 交集: {3}
print(set_a | set_b) # 并集: {1, 2, 3, 4, 5}
print(set_a - set_b) # 差集: {1, 2}
面试考点: 如何创建一个空集合?
s = {}❌ (这是空字典)s = set()✅ (正确写法)
1.4 Dictionary (字典)
关键词:键值对、哈希表、极速查找
字典由 Key (键) 和 Value (值) 组成。它是通过 Key 来直接访问 Value,而不是通过索引位置。
- Key 的限制: 必须是不可变类型(如字符串、数字、元组)。
- Value 的限制: 无限制,可以是任何对象。
- 性能: 无论数据量多大,通过 Key 查找 Value 的时间复杂度接近 O(1)。
# 定义字典
user_info = {
"name": "Gemini",
"age": 1,
"skills": ["Coding", "Writing"]
}
# 快速查找
print(user_info["name"]) # 输出: Gemini
# 添加/修改
user_info["location"] = "Cloud"
# 获取所有键值对
for k, v in user_info.items():
print(f"{k}: {v}")
2 选用建议
在实际开发中,请参考以下决策逻辑:
- 你需要存储“键值对”吗?
- 是 → \rightarrow → Dictionary (例如:用户信息,配置项)
- 你需要数据去重,或者进行数学集合运算吗?
- 是 → \rightarrow → Set (例如:计算共同好友,ID去重)
- 你需要数据是“只读”的,或者作为字典的Key吗?
- 是 → \rightarrow → Tuple (例如:经纬度坐标,数据库查询结果的一行)
- 如果以上都不是,你需要一个有序、可变的容器:
- 是 → \rightarrow → List (绝大多数常规场景,类似于 C/C++ 中的“数组”)
3 总结
- List 是最灵活的数组(类似于 C/C++ 中的数组)。
- Tuple 是不可变的数组,更轻量、更安全。
- Set 是为了去重和数学运算而生的。
- Dictionary 是为了通过 Key 快速检索数据而生的。
理解这四者的区别,能让你的 Python 代码写得更 Pythonic,运行效率更高!
希望这篇文章对你有帮助!欢迎在评论区留言讨论。
更多推荐



所有评论(0)