Python 编程 - 数据类型和数据结构
在 Python 3 开发中,数据类型与数据结构是构建程序的基础。Python 提供了丰富、灵活的内置类型,同时也支持通过标准库或自定义类扩展。下面从基本数据类型和容器数据结构两个维度进行梳理,并补充说明可变性与常用模块。
一、基本数据类型(原子类型)
这些类型用于表示单个值,大多数是不可变的。
| 类型 | 示例 | 说明 |
|---|---|---|
int |
42, -7, 0x1F |
任意大小的整数,支持二进制、十六进制 |
float |
3.14, -0.001, 1.2e-5 |
双精度浮点数,符合 IEEE 754 标准 |
complex |
3+4j, 1.2-0.5j |
复数,实部和虚部均为浮点数 |
bool |
True, False |
布尔值,是 int 的子类(True=1, False=0) |
str |
'hello', "world", """多行""" |
Unicode 字符串,不可变序列 |
bytes |
b'\x61\x62', b"abc" |
不可变的字节序列,常用于二进制 I/O |
bytearray |
bytearray([65,66]) |
可变的字节序列 |
NoneType |
None |
表示空值或缺失值,只有一个实例 |
二、容器数据结构(可包含多个元素)
Python 内置了多种容器,各有其特性与适用场景。
1. 序列类型(有序,可通过下标索引)
| 类型 | 可变性 | 示例 | 特点 |
|---|---|---|---|
list |
可变 | [1, 2, 'a'] |
最常用的动态数组,支持增删改查、切片、嵌套,可存储任意类型元素 |
tuple |
不可变 | (1, 2, 'a') |
固定长度的序列,常用于多返回值、字典键、集合元素 |
range |
不可变 | range(5) |
表示整数等差数列,内存占用极低(仅存储 start, stop, step) |
str |
不可变 | "abc" |
字符串在行为上也是序列,支持索引和切片 |
bytes |
不可变 | b'abc' |
与 str 类似,但元素是 0~255 的整数 |
bytearray |
可变 | bytearray(b'abc') |
可变的字节序列 |
2. 映射类型(键值对)
| 类型 | 可变性 | 示例 | 特点 |
|---|---|---|---|
dict |
可变 | {'name': 'Alice', 'age': 30} |
基于哈希表实现,键必须可哈希(不可变类型),查找、插入、删除的平均时间复杂度 O(1) |
3. 集合类型(无序、唯一)
| 类型 | 可变性 | 示例 | 特点 |
|---|---|---|---|
set |
可变 | {1, 2, 3} |
无序、元素唯一,支持并交差等数学运算 |
frozenset |
不可变 | frozenset([1,2]) |
可作为字典键或集合元素 |
三、数据结构视角的补充说明
虽然在 Python 中没有专门的“栈”“队列”关键字,但可以用现有类型方便地模拟:
- 栈(LIFO):用
list的append()压入,pop()弹出。 - 队列(FIFO):
collections.deque两端操作效率高于list,使用append()入队,popleft()出队。 - 优先队列:使用
heapq模块(最小堆)或queue.PriorityQueue。 - 链表:Python 标准库无内置链表,但
list是动态数组,deque是双端队列(底层为块状数组)。
四、标准库中的常用扩展数据结构
| 模块/类 | 说明 |
|---|---|
collections.namedtuple |
通过名称访问字段的轻量级不可变数据类,比自定义类更省内存 |
collections.deque |
双端队列,两端 O(1) 的 append/pop,适合队列和栈 |
collections.Counter |
字典子类,用于统计可哈希元素的出现次数 |
collections.OrderedDict (Python 3.7+ 中普通 dict 已保留插入顺序) |
记住键的插入顺序(3.7+ 中 dict 已具备此特性,但 OrderedDict 提供了额外的 move_to_end 等方法) |
collections.defaultdict |
当键缺失时返回默认值,避免 KeyError |
heapq |
基于列表实现堆队列(优先队列) |
array.array |
存储同类型数值的紧凑数组,比 list 更节省内存 |
enum.Enum |
定义枚举类型,增加代码可读性 |
五、可变性与哈希性总结
- 不可变类型(可哈希):
int,float,str,tuple,frozenset,bytes,bool,NoneType - 可变类型(不可哈希,不能作为字典键或集合元素):
list,dict,set,bytearray
六、类型检查与转换
- 类型检查:
type(obj),isinstance(obj, type) - 类型转换:
int(),float(),str(),list(),tuple(),dict(),set()等
掌握这些数据类型与数据结构,能够编写出高效、简洁且符合 Python 风格的代码。根据实际场景选择合适的类型(例如需要快速查找用字典,需要唯一无序元素用集合,需要 FIFO 用 deque),是 Python 开发的重要技能。

浙公网安备 33010602011771号