惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
D
Docker
V
Vulnerabilities – Threatpost
T
Tor Project blog
A
Arctic Wolf
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The Last Watchdog
The Last Watchdog
PCI Perspectives
PCI Perspectives
J
Java Code Geeks
罗磊的独立博客
S
Security @ Cisco Blogs
L
LangChain Blog
博客园 - 叶小钗
E
Exploit-DB.com RSS Feed
AWS News Blog
AWS News Blog
Engineering at Meta
Engineering at Meta
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Threat Research - Cisco Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
I
Intezer
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Vercel News
Vercel News
Know Your Adversary
Know Your Adversary
博客园_首页
Blog — PlanetScale
Blog — PlanetScale
L
Lohrmann on Cybersecurity
D
DataBreaches.Net
Latest news
Latest news
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
T
Threatpost
C
Check Point Blog
Microsoft Azure Blog
Microsoft Azure Blog
Help Net Security
Help Net Security
Last Week in AI
Last Week in AI
T
Tenable Blog
小众软件
小众软件
T
Troy Hunt's Blog
MongoDB | Blog
MongoDB | Blog
Simon Willison's Weblog
Simon Willison's Weblog
TaoSecurity Blog
TaoSecurity Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
云风的 BLOG
云风的 BLOG
Cloudbric
Cloudbric
Google DeepMind News
Google DeepMind News
S
Securelist
GbyAI
GbyAI
The Hacker News
The Hacker News
W
WeLiveSecurity

博客园 - 箫笛

Python 编程 - 语句 Python 编程 - 函数 windows - WSL 的安装与使用 shell编程 - dialog 程序使用指南 FE Team - 如何做好前端代码审查 git 提交的撤销和恢复 React15 - redux-saga 如何在saga中实现轮询接口调用? React15 - React CSS Modules BEM命名实践 React15 - React 15 中 componentWillReceiveProps 为什么会多次调用, 同时componentDidUpdate 也会多次调用? React15 - React15类组件多次执行render方法的原因? React15 - React15应用中代码逻辑复用方案 React15 - React状态同步问题解决 React15 - React 15 中 React.pureComponent 的使用场景 React15 - React 15应用在页面渲染时会多次执行类组件的render 函数的原因 React15 - React 15 中能用 componetDidUpdate 代替 componentWillReceiveProps 吗? React15 - React 15 生命周期函数详解 React15 - 如何在React 15中实现自定义的事件订阅与发送(例如组件间通信) React15 - React15应用中的事件订阅和发送机制 React15 - CSS中的BEM规范 React15 - React CSS Modules BEM命名实践 React15 - 写sass 样式文件,嵌套的结构好,还是扁平的结构好? React15 - sass 中 @mixin 和 @extend 的区别是什么? React15 - React 15 应用 如何使用Css moudules 方式进行模块化开发 React15 - React15应用Sass使用指南 React15 - React 15 应用如何进行性能优化?
Python 编程 - 数据类型和数据结构
箫笛 · 2026-06-15 · via 博客园 - 箫笛

在 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 开发的重要技能。