Python 列表与元组的区别和联系
一、基本定义
- 列表(list)
使用方括号[]定义,可变序列
lst = [1, 2, "python", 3.14]
- 元组(tuple)
使用圆括号()定义,不可变序列
tup = (1, 2, "python", 3.14)
# 只有一个元素时必须加逗号
tup_single = (666,)
二、两者的联系
- 都属于 序列类型,支持下标索引、切片操作;
- 都可以存放任意数据类型(数字、字符串、对象、嵌套容器等);
- 支持通用运算符:
+(拼接)、*(重复)、in(成员判断); - 都可以使用
len()获取长度、max()/min()(元素可比较时); - 可以互相转换:
list(元组)、tuple(列表)。
示例:
lst = [1, 2, 3]
tup = tuple(lst) # 列表转元组
new_lst = list(tup) # 元组转列表
三、核心区别
| 对比项 | 列表 list | 元组 tuple |
|---|---|---|
| 符号 | [] 方括号 |
() 圆括号 |
| 可变性 | 可变(mutable),支持增删改元素 | 不可变(immutable),创建后不能修改内部元素 |
| 修改元素 | lst[0]=99、append()、pop()、remove() 均可执行 |
不能赋值修改、不能增删元素,强行修改直接报错 |
| 哈希特性 | 不可哈希,不能作为字典 key | 可哈希,可以作为字典的键(key) |
| 内存占用 | 相对更大 | 占用内存更小,效率更高 |
| 内置方法 | 方法很多:append、extend、pop、remove、sort 等 | 方法很少,只有 count()、index() |
| 适用场景 | 数据需要频繁增删修改 | 数据固定、不希望被意外修改;函数多返回值默认是元组 |
代码演示可变与不可变
# 列表可以修改
lst = [10, 20, 30]
lst[0] = 99
print(lst) # [99, 20, 30]
# 元组不能修改,运行报错
tup = (10, 20, 30)
# tup[0] = 99 # TypeError: 'tuple' object does not support item assignment
重要陷阱:元组不可变指元组第一层引用不变。如果元组内嵌套列表,列表内部元素依旧可以修改!
t = (1, [2, 3])
t[1][0] = 99
print(t) # (1, [99, 3])
四、使用场景建议
-
优先用列表
数据经常变化:需要添加、删除、排序元素(存储动态数据、菜单、任务清单)。 -
优先用元组
- 数据一旦确定不再改动(坐标、常量配置);
- 作为字典键;
- 函数多个返回值;
- 大量只读数据,追求更高性能、节省内存。
五、总结
列表(list)和元组(tuple)是Python中两种常用序列容器。
联系:二者同为序列类型,支持索引、切片、拼接、成员运算,能够保存多种类型数据,并且可以通过list()和tuple()实现相互转换。
核心区别在于可变性:列表是可变对象,创建之后能够新增、删除、修改内部元素,拥有丰富的操作方法,适合存储动态变化的数据;元组属于不可变对象,初始化完成后无法直接修改内部元素,仅提供count()和index()两个方法。
性能上,元组占用内存更少、访问速度更快;特性上元组支持哈希,可以作为字典的键,而列表不可以。需要注意:元组不可变限制的是顶层元素引用,若元组内嵌列表,列表中的内容仍然能够修改。
实际开发中,频繁变动的数据选用列表,固定不变、防止意外篡改的数据选择元组。
浙公网安备 33010602011771号