刚开始学 Python 的同学,大概率都踩过这个坑:
明明元组和列表看起来差不多,一个用 () 一个用 [],怎么有时候改值就报错呢?
今天我们就把两者的区别掰碎了讲,看完再也不用纠结选型。
🔍 1、核心差异:可变性是本质
两者最大的区别,就在于 可变性。
列表是可变对象,你可以随时新增、删除、修改里面的元素:
# 列表示例 my_list = [1, 2, 3] # 新增元素 my_list.append(4) # 修改元素 my_list[0] = 0 # 输出: [0, 2, 3, 4] print(my_list)
而元组是不可变对象,一旦创建就不能修改任何元素:
# 元组示例 my_tuple = (1, 2, 3) my_tuple[0] = 0 # 直接报错: TypeError
注意:如果元组里嵌套了列表,列表本身的内容是可以改的,这只是因为列表是可变对象,并不影响元组本身的不可变特性。
⚡ 2、性能和功能对比
除了可变性,两者在性能和功能上也有不少差异,我们一个个说。
📊 2.1 性能:元组更快更省内存
因为不可变的特性,Python 对元组做了很多优化:
可以自己跑个测试感受下:
import sys a = [1,2,3,4,5] b = (1,2,3,4,5) print(sys.getsizeof(a)) # 输出: 120 print(sys.getsizeof(b)) # 输出: 80
🔧 2.1 功能:列表更灵活,元组更安全
列表提供了 append()、pop()、sort() 等十多个内置方法,适合需要动态修改的场景。
元组因为不可变,方法少得可怜,只有 count() 和 index() 两个,但胜在数据安全,不用担心被意外修改。
🎯 2.2 选型准则:3秒判断用哪个
不用死记硬背,记住下面三个准则就够了。
✅ 选元组的场景
- 需要作为字典的 key(只有不可变对象才能当 key)
✅ 选列表的场景
举个最常见的例子:接口返回的用户信息固定用元组,临时存储的用户列表用列表,就非常合理。
📌 3、最后总结
简单说就是:固定不变用元组,动态变化用列表。
两者没有绝对的好坏,只是适用场景不同而已。选对了不仅代码更高效,可读性也会提升一大截。
你平时写代码的时候有没有搞混过两者?欢迎在评论区聊聊你踩过的坑~