Python 提供了丰富且灵活的内置数据结构,用于高效地组织、存储和操作数据。这些数据结构可分为**可变(mutable)与不可变(immutable)**两大类,并根据其特性适用于不同场景。
以下是 Python 中最核心的6 种内置数据结构的详细介绍:
1.列表(List)—— 可变、有序、允许重复
特点:
- 用方括号
[]定义 - 元素有序(有索引,从 0 开始)
- 允许存储不同类型的数据(如整数、字符串、对象等)
- 可变:支持增删改操作
- 允许重复元素
常见操作:
lst=[1,'hello',3.14,True]lst.append('new')# 添加元素lst[0]=100# 修改lst.insert(1,'x')# 在位置1插入lst.pop()# 删除并返回最后一个元素lst.remove('hello')# 删除第一个匹配项len(lst)# 长度适用场景:
- 需要动态修改的数据集合
- 保持元素插入顺序
- 频繁按索引访问或遍历
⚠️ 注意:列表在头部插入/删除效率低(O(n)),此时可考虑
collections.deque
2.元组(Tuple)—— 不可变、有序、允许重复
特点:
- 用圆括号
()定义(也可省略) - 元素有序、可索引
- 不可变:创建后不能修改内容
- 允许重复、可包含不同类型
示例:
tup=(1,'a',3.14)# tup[0] = 10 # ❌ 报错!不可变print(tup[1])# 'a'优势:
- 比列表更节省内存
- 可作为字典的键(因不可变)
- 线程安全(无并发修改风险)
适用场景:
- 表示固定结构的数据(如坐标
(x, y)、RGB 颜色) - 函数返回多个值
- 用作字典键或集合元素
3.字典(Dictionary)—— 可变、无序(Python 3.7+ 保持插入顺序)、键唯一
特点:
- 用花括号
{}定义,格式为{key: value} - 键必须是不可变类型(如 str、int、tuple)
- 值可以是任意类型
- 键唯一,重复赋值会覆盖旧值
- Python 3.7 起,字典保持插入顺序
常见操作:
d={'name':'Alice','age':25}d['city']='Beijing'# 添加/修改print(d['name'])# 访问deld['age']# 删除键值对'name'ind# 检查键是否存在d.get('height',0)# 安全取值,不存在返回默认值适用场景:
- 映射关系(如配置项、缓存、JSON 数据)
- 快速查找(平均 O(1) 时间复杂度)
4.集合(Set)—— 可变、无序、元素唯一
特点:
- 用花括号
{}定义(但空集合需用set()) - 元素无序、不重复
- 元素必须是不可变类型(如数字、字符串、元组)
- 支持数学集合运算(并、交、差、对称差)
示例:
s={1,2,3,3}# 自动去重 → {1, 2, 3}s.add(4)s.remove(1)s.discard(10)# 不存在也不报错# 集合运算a={1,2,3}b={3,4,5}print(a|b)# 并集 → {1,2,3,4,5}print(a&b)# 交集 → {3}print(a-b)# 差集 → {1,2}适用场景:
- 去重(如
list(set(my_list))) - 成员快速检测(
x in my_set比列表快得多) - 数学集合操作
💡 不可变集合:
frozenset—— 可作为字典键或嵌套在其他集合中
5.字符串(String)—— 不可变、有序、字符序列
特点:
- 用单引号
' '或双引号" "定义 - 不可变:任何“修改”操作都会生成新字符串
- 支持索引、切片、遍历
- 是 Unicode 字符序列(Python 3 默认)
常见操作:
s="Hello"s[0]# 'H's.upper()# 'HELLO'(返回新字符串)'lo'ins# Trues.split()# 分割''.join(['a','b'])# 拼接适用场景:
- 文本处理、文件路径、用户输入等
6.其他重要数据结构(来自标准库)
虽然不是“内置”关键字类型,但 Python 标准库提供了更专业的数据结构:
| 结构 | 所在模块 | 特点 |
|---|---|---|
deque | collections | 双端队列,两端高效插入/删除(O(1)) |
Counter | collections | 计数器,统计元素出现次数 |
defaultdict | collections | 带默认值的字典,避免 KeyError |
namedtuple | collections | 带字段名的元组,可读性更强 |
OrderedDict | collections | 显式保持插入顺序(Python 3.7+ 普通 dict 已具备) |
heapq | heapq | 最小堆实现,用于优先队列 |
array | array | 存储同类型基本数据,比列表更省内存 |
示例:Counter
fromcollectionsimportCounter cnt=Counter(['a','b','a','c'])print(cnt)# Counter({'a': 2, 'b': 1, 'c': 1})对比总结表
| 数据结构 | 可变? | 有序? | 允许重复? | 典型用途 |
|---|---|---|---|---|
| list | ✅ | ✅ | ✅ | 通用序列,动态数组 |
| tuple | ❌ | ✅ | ✅ | 固定结构,函数返回值 |
| dict | ✅ | ✅(3.7+) | 键❌ / 值✅ | 键值映射,快速查找 |
| set | ✅ | ❌ | ❌ | 去重,成员检测,集合运算 |
| str | ❌ | ✅ | ✅ | 文本处理 |
| frozenset | ❌ | ❌ | ❌ | 不可变集合,可用作键 |
选择建议
- 需要顺序 + 可修改→
list - 数据固定不变→
tuple - 需要键值对应→
dict - 只关心存在与否/去重→
set - 处理文本→
str - 高性能队列 →
collections.deque - 统计频次 →
collections.Counter
掌握这些数据结构及其特性,是写出高效、清晰 Python 代码的基础。