【Python我做主】列表(list) vs 元组(tuple):2026 年最清晰、最实用的对比,一文彻底分清!
大家好,我是重阳。
很多同学学 Python 的时候,列表和元组 总是傻傻分不清:
“两者长得几乎一样,为什么一个能改一个不能改?什么时候用哪个?”
今天用 最直白、最实战 的方式一次性讲透,让你以后再也不纠结!
1. 一图秒懂:列表 vs 元组 核心区别
| 维度 | 列表(list) | 元组(tuple) | 谁赢? |
|---|---|---|---|
| 定义方式 | [1, 2, 3] | (1, 2, 3) 或 1, 2, 3 | – |
| 可变性 | 可变(可以增删改) | 不可变(创建后无法修改) | 元组胜 |
| 内存占用 | 更大(预留扩容空间) | 更小(固定大小,内存更紧凑) | 元组胜 |
| 速度 | 稍慢 | 更快(尤其是遍历和创建) | 元组胜 |
| 作为字典 key | 不可以(可变) | 可以(不可变,可哈希) | 元组胜 |
| 作为函数参数 | 适合需要修改的数据 | 适合配置、常量、返回值 | – |
| 典型用途 | 动态数据、需要频繁增删改 | 固定配置、坐标、函数多返回值、dict key | – |
一句话总结:
- 列表 = 可变数组 → 用来“干活”(增删改查)
- 元组 = 不可变数组 → 用来“存数据”(安全、高效、只读)
2. 代码对比(直接复制运行感受)
# ==================== 列表(可变) ====================
lst = [1, 2, 3]
print("原列表:", lst)
lst.append(4) # 可以增加
lst[0] = 999 # 可以修改
lst.pop() # 可以删除
print("修改后:", lst) # [999, 2, 3]
# ==================== 元组(不可变) ====================
tup = (1, 2, 3)
print("原元组:", tup)
# tup[0] = 999 # 报错!TypeError
# tup.append(4) # 报错!
# tup.pop() # 报错!
print("元组无法修改")
3. 实战场景:什么时候必须用哪个?
用列表(list)的场景:
- 需要频繁增删改的数据(如用户购物车、待办事项)
- 动态收集数据(爬虫结果、Excel 读取)
- 需要排序、反转、去重等操作
用元组(tuple)的场景(2026 年越来越推荐):
- 函数返回多个值(
return x, y, z其实返回的是元组) - 配置信息、常量(如数据库连接配置、API 密钥)
- 作为字典的 key(比如坐标
(x,y)做 key) - 需要高性能遍历的只读数据(日志记录、坐标点)
- 线程安全(不可变天生线程安全)
经典多返回值示例:
def get_user_info():
return ("张三", 18, "北京") # 返回元组
name, age, city = get_user_info() # 解包
4. 性能对比(真实数据,2026 测试)
import timeit
import sys
lst = [i for i in range(10000)]
tup = tuple(range(10000))
print("列表占用内存:", sys.getsizeof(lst)) # 约 85176 字节
print("元组占用内存:", sys.getsizeof(tup)) # 约 80040 字节(更省)
# 遍历速度
print("列表遍历耗时:", timeit.timeit(lambda: sum(lst), number=10000))
print("元组遍历耗时:", timeit.timeit(lambda: sum(tup), number=10000))
结论:相同数据量下,元组比列表快 5%~20%,内存更省。
5. 易错点 & 小技巧
- 单元素元组 必须加逗号:
(5,)而不是(5) - 列表可以直接转元组:
tuple([1,2,3]) - 元组可以直接转列表:
list((1,2,3)) - 想“修改”元组?只能重新创建:
tup = tup[:2] + (999,)
6. 一句话口诀(背下来就再也不会混)
“列表能改,元组不能改; 列表干活,元组存数据; 列表吃内存,元组省空间; 列表当变量,元组当常量。”
今天就行动:
- 把你项目里所有“不会修改的列表”改成元组
- 函数返回值尽量用元组 + 解包
- 评论区打 “已分清”,我下一期送你 《Python 列表 vs 元组 50 道练习题》
想继续看 下一期?
评论区打 1(列表推导式 vs 生成器表达式)、2(深拷贝 vs 浅拷贝彻底讲透)、3(Python 常用数据结构全家桶),我立刻出!
Python 我做主,从今天起,列表和元组再也不傻傻分不清!🐍
咱们下期见!🚀