Python 元组(tuple)详解_python元组
在Python中,元组(tuple
)是一种不可变的有序集合,可以存储任意类型的元素。与列表不同的是,一旦创建了元组,就不能修改其内容。这使得元组非常适合用于不需要更改的数据集合。
一、元组基础
1.1 元组创建
t1 = (1, 2, 3) # 标准创建方式t2 = 1, 2, 3 # 括号可省略(逗号是关键)t3 = tuple([1, 2, 3]) # 从可迭代对象转换t4 = (42,) # 单元素元组(必须有逗号)t5 = () # 空元组
1.2 类型特性
type((1, 2)) # isinstance((), tuple) # Trueissubclass(tuple, object) # True
二、元组底层实现
2.1 PyTupleObject结构
元组在CPython中是固定长度的数组:
typedef struct { PyObject_VAR_HEAD PyObject *ob_item[1]; // 存储元素的柔性数组} PyTupleObject;
2.2 内存特性
- 不可变对象,创建后无法修改
- 比列表更节省内存(不需要超额分配)
- 小元组会被缓存复用
2.3 内存占用
import syssys.getsizeof(()) # 40字节(空元组基础开销)sys.getsizeof((1, 2, 3)) # 72字节sys.getsizeof((0,)*100) # 848字节
三、元组操作
3.1 基本操作
t = (1, 2, 3)t[0] # 1 (索引访问)t[1:] # (2, 3) (切片)t[-1] # 3 (负索引)len(t) # 33 in t # True (成员检查)
3.2 不可变性
t = (1, [2, 3], 4)t[1].append(5) # 合法:修改元组中的可变元素t[1] = [2,3,5] # TypeError: 不能修改元组元素
3.3 解包操作
x, y, z = (1, 2, 3) # x=1, y=2, z=3a, *b, c = (1, 2, 3, 4) # a=1, b=[2,3], c=4
四、高级元组操作
4.1 命名元组
from collections import namedtuplePoint = namedtuple(\'Point\', [\'x\', \'y\'])p = Point(11, y=22)p.x, p.y # (11, 22)p[0] + p[1] # 33
4.2 元组推导式
Python没有真正的元组推导式,但可以使用生成器表达式转换:
tuple(x**2 for x in range(5)) # (0, 1, 4, 9, 16)
4.3 元组拼接
(1, 2) + (3, 4) # (1, 2, 3, 4)(1, 2) * 3 # (1, 2, 1, 2, 1, 2)
五、性能分析
5.1 与列表对比
5.2 使用场景
- 使用元组:固定数据、字典键、函数返回值、保护数据不被修改
- 使用列表:需要动态修改的数据
六、元组特殊用法
6.1 函数多返回值
def get_stats(data): return min(data), max(data), sum(data)/len(data)minimum, maximum, average = get_stats([1, 2, 3])
6.2 字典键
locations = { (35.6895, 139.6917): \"Tokyo\", (40.7128, -74.0060): \"New York\"}
6.3 格式化字符串
\"Name: %s, Age: %d\" % (\"Alice\", 25)
七、元组与其他数据结构
7.1 与列表转换
lst = list((1, 2, 3)) # [1, 2, 3]t = tuple([1, 2, 3]) # (1, 2, 3)
7.2 与集合转换
unique = tuple({1, 2, 2, 3}) # (1, 2, 3)
7.3 与字典交互
d = {\'a\': 1, \'b\': 2}tuple(d.keys()) # (\'a\', \'b\')tuple(d.items()) # ((\'a\', 1), (\'b\', 2))
八、安全注意事项
8.1 不可变性陷阱
t = ([1, 2], [3, 4])t[0].append(3) # 合法但可能造成意外
8.2 大元组处理
# 超大元组会占用连续内存big_tuple = tuple(range(10**6)) # 可能引发内存问题
九、扩展应用
9.1 记录数据
person = (\"Alice\", 25, \"New York\")name, age, city = person
9.2 枚举值
COLORS = (\"RED\", \"GREEN\", \"BLUE\")def set_color(color): if color not in COLORS: raise ValueError
9.3 函数参数传递
args = (1, 2, 3)def func(a, b, c): return a + b + cfunc(*args) # 6