python的列表和元组别再傻傻分不清啦

【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. 一句话口诀(背下来就再也不会混)

“列表能改,元组不能改; 列表干活,元组存数据; 列表吃内存,元组省空间; 列表当变量,元组当常量。”

今天就行动

  1. 把你项目里所有“不会修改的列表”改成元组
  2. 函数返回值尽量用元组 + 解包
  3. 评论区打 “已分清”,我下一期送你 《Python 列表 vs 元组 50 道练习题》

想继续看 下一期
评论区打 1(列表推导式 vs 生成器表达式)、2(深拷贝 vs 浅拷贝彻底讲透)、3(Python 常用数据结构全家桶),我立刻出!

Python 我做主,从今天起,列表和元组再也不傻傻分不清!🐍

咱们下期见!🚀

文章已创建 5074

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部