🔒 07. 元组 tuple 详解

本章概述

学习 Python 元组的定义、特点和使用场景。 预计学习时间:30 分钟


7.1 元组定义

元组是有序、不可变的容器,类似只读列表。

# 空元组
t = ()
t = tuple()
 
# 有元素的元组
t = (1, 2, 3)
t = ("a", "b", "c")
 
# 单个元素的元组(注意逗号!)
t = (1,)   # ✅ 是元组
t = (1)    # ❌ 不是元组,就是整数1

单个元素的元组

只有一个元素时,后面必须加逗号,否则括号会被当作运算符。


7.2 元组的特点

特点说明
不可变不能增删改元素
有序有索引,可以切片
可重复元素可以重复
混合类型元素类型可以不同
速度快比列表访问速度快
可当字典key不可变对象可以当字典的key

为什么要有元组?

  1. 保护数据:不希望被修改的数据用元组
  2. 性能更好:元组比列表更快、占内存更少
  3. 字典key:元组可以当字典的key,列表不行
  4. 函数返回值:函数返回多个值时,默认是元组

7.3 元组支持的操作

t = (1, 2, 3, 4, 5)
 
# 索引和切片(和列表一样)
t[0]       # 1
t[1:4]     # (2, 3, 4)
 
# 拼接、重复
t + (6, 7)  # (1, 2, 3, 4, 5, 6, 7)
t * 2       # (1, 2, 3, 4, 5, 1, 2, 3, 4, 5)
 
# 成员判断
3 in t      # True
 
# 长度
len(t)      # 5
 
# 统计、查找
t.count(2)  # 1
t.index(3)  # 2
 
# 遍历
for item in t:
    print(item)

元组的方法很少

因为不可变,所以没有 append、pop、remove、sort 等修改方法。 只有 count()index() 两个方法。


7.4 元组的不可变性

理解不可变

元组的「不可变」指的是元组本身的元素引用不可变。 如果元素本身是可变对象(如列表),那个对象的内容是可以变的。

t = (1, 2, [3, 4])
 
# t[0] = 10  # ❌ 报错,元组元素不能改
 
# 但如果元素本身是可变对象(如列表),可以修改那个对象的内容
t[2].append(5)
print(t)  # (1, 2, [3, 4, 5])
 
# 注意:元组存的是列表的引用,引用没变,列表本身变了

7.5 元组解包

Python 特色

元组解包是非常实用的语法!

# 多变量赋值
a, b, c = (1, 2, 3)
print(a, b, c)  # 1 2 3
 
# 交换两个变量(Python特有,不用临时变量)
a, b = b, a
 
# 用*号收集多余元素
first, *rest = (1, 2, 3, 4, 5)
print(first)  # 1
print(rest)   # [2, 3, 4, 5]
 
*rest, last = (1, 2, 3, 4, 5)
print(rest)   # [1, 2, 3, 4]
print(last)   # 5
 
first, *middle, last = (1, 2, 3, 4, 5)
print(first)   # 1
print(middle)  # [2, 3, 4]
print(last)    # 5

解包的应用

  • 交换变量:a, b = b, a
  • 函数返回多个值
  • 遍历字典的 items()
  • 拆分数据

7.6 元组和列表的区别

特性列表 list元组 tuple
可变性可变(增删改)不可变
语法[]()
速度较慢较快
内存占用多占用少
能否当字典key不能
方法数量多(11个)少(2个)
推导式列表推导式没有元组推导式(是生成器)

什么时候用元组?

  • ✅ 数据不应该被修改时(保护数据)
  • ✅ 需要作为字典的key时
  • ✅ 函数返回多个值时(默认返回元组)
  • ✅ 作为配置参数等固定数据时

什么时候用列表?

  • ✅ 数据需要经常变化时
  • ✅ 需要增删改操作时
  • ✅ 需要排序、反转等操作时

7.7 元组和列表的转换

# 列表转元组
lst = [1, 2, 3]
t = tuple(lst)  # (1, 2, 3)
 
# 元组转列表
t = (1, 2, 3)
lst = list(t)   # [1, 2, 3]

小技巧

想「修改」元组怎么办?

  1. 转成列表,修改后再转回元组
  2. 或者直接创建新的元组

🔗 相关章节


📝 我的笔记

在这里记录你的理解、疑问和练习代码

# 你的练习代码
 

✅ 本章检查清单

  • 掌握元组的定义和特点
  • 理解元组的不可变性
  • 会使用元组解包
  • 知道元组和列表的区别
  • 了解什么时候用元组,什么时候用列表
  • 会进行元组和列表的转换