内置类型的复杂度¶
Python 内置类型的各项操作都有明确的复杂度特性。本节对最常用的类型给出详细分析。
概览¶
| 类型 | 适用场景 | 平均访问 | 平均插入 | 平均删除 |
|---|---|---|---|---|
list |
有序序列 | O(1) | O(n) | O(n) |
tuple |
不可变序列 | O(1) | - | - |
range |
数值序列 | O(1) | - | - |
str |
文本 | O(1) | - | - |
bytes |
二进制数据 | O(1) | - | - |
dict |
键值映射 | O(1) | O(1) | O(1) |
set |
唯一元素 | - | O(1) | O(1) |
frozenset |
不可变的唯一元素 | - | - | - |
详细指南¶
序列类型¶
映射与集合类型¶
核心概念¶
均摊复杂度¶
某些操作(如 list.append())具有均摊 O(1) 复杂度,这意味着:
- 大多数追加操作是 O(1)
- 偶尔会触发一次需要 O(n) 的扩容
- 在大量操作上平均下来是 O(1)
实现细节¶
CPython 使用:
- 列表:带超额分配的动态数组
- 字典:采用开放寻址的哈希表
- 集合:哈希表(与字典类似)
版本说明¶
不同 Python 版本各有优化:
- Python 3.7+:字典的插入顺序得到保证(语言规范)
- Python 3.9+:新的字典实现带来改进
- Python 3.10+:对常见操作的进一步优化
按版本查看详细变更日志,请参见版本。