在 python 中列表(List)和元组(Tuple)都是序列类型,但它们在各方面有着各种的不同
一.可变性 - 最关键区别
列表(List) | 元组(Tuple) | |
---|---|---|
可变性 | 可变(Mutable) | 不可变(Immutable) |
操作示例 | list.append(1) | tuple[0] = 1 会报错 |
二.语法
# 列表用方括号
list_example = [1,2,3,4,"a"]
# 元组用圆括号
tuple_example = (1,2,3,4,"a")
# 单元素元组必须加逗号
single_element_tuple = (42, ) # 正确
not_a_tuple = (42) # 实际是整数 42
三.性能差异
列表 | 元组 | |
---|---|---|
创建速度 | 较慢(需动态分配内存) | 更快(固定内存分配) |
内存占用 | 更大(预留扩展空间) | 更小(精确分配) |
迭代速度 | 基本一致 | 基本一致 |
四.使用场景
列表的场景
- 需要频繁修改数据集合(增删改)
- 存储同类型数据(如所有数字)
- 需要用到列表专属方法(
.append()
,insert()
,remove()
等)
元组的场景
- 作为字典的健(因为不可变)
- 函数返回多个值(如
return (x,y)
) - 保护数据不被意外修改
- 存储异构数据(如坐标
(x,y,z)
)
五.方法对比
# 列表方法很多
lst = [1,2,3]
lst.append(4) # [1,2,3,4]
lst.insert(0,0) # [0,1,2,3,4]
# 元组只有两个方法
tpl = (1,2,3)
print(tpl.count(2)) # 1 统计元素出现次数
print(tpl.index(3)) # 2 查找元素位置
六.两者内存机制
a = [1,2,3]
b = a
b.append(4)
print(a) # [1,2,3,4] (列表是引用传递)
x = (1,2,3)
y = x
# y += (4,) 会创建新的元组,不影响原x
七.两者之间转换
lst = [1,2,3]
tpl = tuple(lst) # 列表转元组 -> (1,2,3)
tpl =("a","b","c")
lst = list(tpl) # 元组转列表 -> ['a','b','c']
总结
列表
方括号,内容可变,操作灵活,适合动态数据
元组
圆括号,内容锁定,安全高效,适合固定数据
当需要数据不可变时用元组,需要频繁修改时用列表。两者选择直接影响代码的安全性和性能