page contents

Python 3.15要来了,启动速度翻倍、自带不可变字典

Python 3.15 已经进入 Beta 2 阶段,正式版预计 2026 年 10 月发布。这次更新带来了几项「等了十年」的特性:延迟导入、内置 frozendict、百万赫兹级采样分析器,以及推导式解包。

attachments-2026-07-LpbtSfID6a5836c01cc06.png

Python 3.15 已经进入 Beta 2 阶段,正式版预计 2026 10 月发布。这次更新带来了几项「等了十年」的特性:延迟导入、内置 frozendict、百万赫兹级采样分析器,以及推导式解包。

以下是 5 个最值得关注的新特性,全部可以在 Beta 版中实际体验。

 

一、延迟导入:启动速度质的飞跃

PEP 810,这是 Python 3.15 最重磅的特性。

Python 启动慢的一大原因是 import 语句在模块加载时立即执行,哪怕你根本不会用到那个模块。延迟导入(Lazy Imports)解决了这个问题——模块只在首次使用时才真正加载。

# 声明延迟导入
lazy import json
lazy from pathlib import Path

print("应用启动中...")  # json pathlib 还没加载

# 这里才真正加载 json 模块
data = json.loads('{"key": "value"}')

全局启用(所有 import 都延迟):

python -X lazy_imports=all app.py
PYTHON_LAZY_IMPORTS=all python app.py

CLI 工具、大型 Web 应用、Jupyter Notebook 内核——这些场景的启动速度会有肉眼可见的提升。

限制:只能在模块作用域使用 lazy import,不支持 from module import *

二、frozendict:不可变字典终于内置了

PEP 814,社区呼声最高的特性之一。

Python  dict 是可变的,不能作为字典的 key 或放进 setfrozendict 解决了这个问题:

>>> from builtins import frozendict

>>> fd = frozendict(x=1, y=2, z=3)
>>> fd['w'] = 4
TypeError: 'frozendict' object does not support item assignment

# 可哈希,能当 cache key
>>> hash(fd)
>>> cache = {fd: "cached_value"}

# 顺序无关的比较
>>> frozendict(a=1, b=2) == frozendict(b=2, a=1)
True

核心属性:

特性

说明

不可变

创建后无法修改,所有修改操作抛 TypeError

可哈希

键和值都可哈希时,frozendict 本身可哈希

dict 子类

继承自 object,与 dict 是平行关系

顺序无关比较

a=1,b=2 b=2,a=1 判等

保留插入顺序

迭代顺序与创建时一致

jsonpicklecopypprint 等标准库模块已适配 frozendict。缓存场景、配置对象、函数返回多个不可变值的场景非常实用。

三、Tachyon:百万赫兹采样分析器,几乎零开销

PEP 799,彻底改变 Python 性能分析的方式。

传统的 cProfile 是追踪式的——每个函数调用都记录,开销大,生产环境基本不敢开。Tachyon 是采样式的,采样率高达 1,000,000 Hz几乎零性能开销,可以放心在生产环境跑。

# 基础使用:以 100 万赫兹采样率分析脚本
python -m profiling.sampling --freq 1000000 my_script.py

# 生成火焰图(交互式 HTML
python -m profiling.sampling --flamegraph my_script.py

# 实时 TUI 界面
python -m profiling.sampling --live my_script.py

# 附加到运行中的进程
python -m profiling.sampling attach --pid 12345

# GIL 感知模式(分析 GIL 竞争)
python -m profiling.sampling --mode gil my_script.py

输出格式支持火焰图(D3.js 交互式)、pstats(兼容 cProfile)、Firefox Profiler、折叠格式(兼容 Brendan Gregg 工具链)。

架构变化:cProfile 保留为兼容别名,profile 模块标注为废弃(Python 3.17 移除),推荐统一使用新的 profiling 包。

四、推导式中解包:一行代码展平嵌套列表

PEP 798,小而美的语法糖。

# 之前的写法
result = [item for sublist in lists for item in sublist]

# Python 3.15
result = [*L for L in lists]

# 字典推导式也支持
>>> dicts = [{'a': 1}, {'b': 2}, {'a': 3}]
>>> {**d for d in dicts}
{'a': 3, 'b': 2}

# 生成器表达式
>>> list((*x for x in [(1, 2), (3, 4)]))
[1, 2, 3, 4]

专门为嵌套列表展平设计的语法,比双重 for 循环直观很多。

五、UTF-8 成为默认编码

PEP 686,结束了跨平台编码不一致的噩梦。

# Python 3.14:依赖平台默认编码
open('file.txt')  # Windows 可能是 GBKLinux UTF-8

# Python 3.15:默认 UTF-8
open('file.txt')  # 所有平台一致

# 需要平台特定编码时显式指定
open('file.txt', encoding='locale')  # 恢复旧行为

Windows 开发者终于不用因为编码问题追着 GBK UTF-8 的转换 bug 跑了。

其他值得关注的变化

智能错误提示

Python 3.15 的错误消息变得更聪明:

>>> my_list.push(42)
AttributeError: 'list' object has no attribute 'push'. Did you mean '.append()'?

>>> (1, 2, 3).append(4)
AttributeError: 'tuple' object has no attribute 'append'. Did you mean to use a 'list'?

跨语言方法建议(.push() → .append().toUpperCase() → .upper())对从 JS/Java 转过来的开发者特别友好。

JIT 编译器升级

3.13 引入的 JIT 3.15 迎来了最大一次升级,结合分代 GC 的优化回退(从 3.13 的增量 GC 回退到性能更优的分代 GC),整体执行效率继续提升。

asyncio 改进

TaskGroup 新增 cancel() 方法,可以在特定条件下提前取消任务组中的所有任务:

async with asyncio.TaskGroup() as tg:
    task1 = tg.create_task(long_task())
    task2 = tg.create_task(another_task())
    if timeout_condition:
        tg.cancel()  # 一键取消所有任务

升级注意事项

注解求值时机变了__annotations__ 不再立即求值,依赖旧行为的代码要调整(不过绝大多数应用不受影响)

profile 模块即将移除:迁移到 profiling 

GC 行为变化:从增量 GC 回退到分代 GC,内存使用模式可能有细微差异

编码依赖检查:如果代码依赖平台默认编码(如 GBK),需要显式指定 encoding='locale'

写在最后

Python 3.15 的几个核心特性——延迟导入、frozendictTachyon——本质上都是在解决「真实世界」的问题:启动太慢、缓存 key 不好做、性能分析没法上生产。

延迟导入对 CLI 工具和大型应用的启动速度提升最直接,frozendict 填补了长期缺失的内置类型空白,Tachyon 则让 Python 拥有了跟 Go pprof 同级别的生产级性能分析能力。

正式版预计 2026 10 月发布(EOL 2032 10 月)。想尝鲜可以:

pip install pyupgrade
pyupgrade --py315-plus **/*.py  # 自动迁移代码

ruff check --select UP --target-version py315 .  # Lint 检查

 更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2026-07-16 09:41
  • 阅读 ( 21 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

2247 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. Pack 2247 文章
  3. 小柒 2228 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章