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):用 listappend() 压入,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 开发的重要技能。

posted @ 2026-06-15 09:40  箫笛  阅读(1)  评论(0)    收藏  举报