Python 元组(Tuple):高效且不可变的数据结构

liftword4周前 (04-03)技术文章2

在 Python 中,元组(tuple)是一种不可变(immutable)的序列类型,适用于存储不希望被修改的数据。相比于列表(list),元组占用更少的内存,且访问速度更快(faster access speed),因此在数据量较大、要求稳定性的场景(scenarios requiring stability)下,元组是一个不错的选择。


1 元组的创建(Tuple Creation)

元组可以使用圆括号parentheses)创建,也可以直接用逗号(,)分隔多个值:

# 使用括号创建元组
t1 = (1, 2, 3, 4)

# 省略括号,直接用逗号
t2 = 5, 6, 7

# 创建单个元素的元组(注意逗号,否则会变成普通数据类型)
t3 = (10,)  
t4 = 10    # 这不是元组,而是整数

# 使用 tuple() 构造函数
t5 = tuple([1, 2, 3])  # 将列表转换为元组
t6 = tuple("hello")     # 字符串拆分成元组

注意: 如果元组中只有一个元素,必须加一个逗号comma,否则 Python 认为它是普通变量。


2 元组的访问(Tuple Access)

元组支持索引indexing)和切片slicing,类似于列表list)。

t = (10, 20, 30, 40, 50)

# 通过索引获取元素(Indexing)
print(t[0])   # 输出:10
print(t[-1])  # 输出:50(倒数第一个元素)

# 通过切片获取部分元素(Slicing)
print(t[1:3])   # 输出:(20, 30)
print(t[:3])    # 输出:(10, 20, 30)
print(t[::2])   # 输出:(10, 30, 50)  # 步长为2

索引超出范围out of range)会报错,而列表切片不会。


3 元组的不可变性(Immutability)

元组的最大特点是不可变immutable,即创建后无法修改。

t = (1, 2, 3)

# 尝试修改元组中的元素(会报错)
t[0] = 100  # TypeError: 'tuple' object does not support item assignment

但如果元组中的可变对象mutable object)被修改,整个元组仍然保持不变。

t = ([1, 2], [3, 4])  # 元组中的元素是列表(可变)
t[0].append(99)
print(t)  # 输出:([1, 2, 99], [3, 4])  

元组不可变,但内部的可变对象仍然可以更改!


4 元组的解包(Tuple Unpacking)

元组支持解包unpacking,可以将元组中的元素赋值给多个变量。

# 直接解包
a, b, c = (1, 2, 3)
print(a, b, c)  # 输出:1 2 3

# 交换变量
x, y = 5, 10
x, y = y, x  
print(x, y)  # 输出:10 5

# 使用 * 号收集多余元素
first, *middle, last = (10, 20, 30, 40)
print(first, middle, last)  # 输出:10 [20, 30] 40

注意: 操作符可以收集多个元素,返回一个列表。


5 元组 vs. 列表(Tuple vs. List)

特性

元组(Tuple)

列表(List)

是否可变(Mutable)

不可变

可变

访问速度(Speed)

略慢

内存占用(Memory)

略大

适用场景(Usage)

数据固定、不变的情况

数据需要修改的情况

如果数据不会变动,建议使用元组(tuple),否则使用列表(list)。


6 常见操作(Common Operations)

Python 提供了一些常用的方法来操作元组:

t = (10, 20, 30, 40, 20)

# 统计元素个数
print(t.count(20))  # 输出:2

# 获取元素索引
print(t.index(30))  # 输出:2

# 判断元素是否在元组中
print(50 in t)  # 输出:False

元组方法很少,主要提供 count() 和 index(),不像列表那样丰富。


7 什么时候用元组?(When to Use Tuple?)

数据不会改变时:如数据库查询结果、配置项configuration)、地理坐标coordinates)等。
作为字典的键Keys in Dictionary:因为元组是哈希化hashable)的,而列表不能作为字典的键。

data = {(35.6895, 139.6917): "Tokyo", (40.7128, -74.0060): "New York"}
print(data[(35.6895, 139.6917)])  # 输出:Tokyo

提高性能Performance Optimization:元组比列表更快,占用更少的内存。

import sys
a = (1, 2, 3)
b = [1, 2, 3]
print(sys.getsizeof(a), sys.getsizeof(b))  # 元组占用更少的内存

总结(Summary)

  1. 元组是不可变的(Immutable),比列表更快,占用更少内存。
  2. 支持索引(index)、切片(slicing)、解包(unpacking)。
  3. 可作为字典的键(Keys in Dict),适用于不变的数据。
  4. 元组的方法较少,主要有 count() 和 index()。
  5. 数据不会变动时,推荐使用元组(Tuple)。

这样,你学会 Python 元组了吗?

相关文章

Python 中的元组

元组是 Python 中的一种内置数据结构,可用于存储项目的有序集合。与列表类似,元组可以在单个实体中保存多种数据类型,但它们是不可变的,这意味着一旦创建,就无法修改、添加或删除元素。此属性使 Tup...

Python的元组,没想象的那么简单

来源:AI入门学习作者:小伍哥Python的元组与列表类似,元组一旦创建,元组中的数据一旦确立就不能改变,不能对元组中中的元素进行增删改操作,因此元组没有增加元素append、更新元素update、弹...

python序列之元组详解

与列表类似,元组也是由任意元素组成的序列,不同的是元组是不可变的,意味着一旦元组被定义将无法再进行修改操作,因此它显得比较古板。元组的创建:可以使用() 创建元组empty = () #定义了一个空元...

3分钟掌握Python 中的元组

元组是 Python 中一种重要的数据类型,它允许您存储值集合,类似于列表。但是,元组与列表的不同之处在于它们是不可变的,这意味着元组一旦创建,就无法修改。2. 语法在 Python 中,元组是通过在...

Python中的元组详解

1.介绍元组是Python中一种重要的数据类型,它允许存储值的集合,类似于列表。然而,元组与列表的不同之处在于它们是不可变的,这意味着一旦创建了元组,就不能修改它。2.语法在Python中,元组是通过...

Python 基础 之 元组(tuple)

在Python中,元组(tuple)是一个不可变的序列类型,它与列表(list)非常相似,但一旦创建,就不能修改(即不能添加、删除或更改元素)。元组通常用于保护数据不被改变,或者当你需要一个不可变的序...