You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中Immortal Objects(永久对象)工作原理及相关疑问

聊聊PEP 683:用固定引用计数实现“永生”对象

先搞懂核心逻辑:Python为啥要搞“永生”对象?

Python里的对象靠引用计数管内存——一个对象被引用一次,计数加1;引用消失,计数减1,减到0就被回收。但像None、True、False这种全局独一份的对象,从解释器启动到关闭一直存在,根本不需要被回收。以前它们的引用计数还是会被反复修改,反而多了没必要的操作,还可能引发底层bug。

什么是“永生”对象?

PEP 683给这类对象加了个特殊标记:把它们的引用计数固定成一个超大的数(比如2^64-1)。这样一来:

  • 不管怎么引用、取消引用,计数都不会变,永远不会减到0,也就永远不会被回收
  • 解释器不用再给它们做计数修改的操作,能省点性能开销

为啥选None、True、False这些?

这些对象天生就是不可变+全局唯一的:

  • 不可变:你没法把True改成False,它们的值从出生就定死了
  • 全局唯一:整个Python程序里,None就只有一个,你写一万个None,指向的都是同一个内存地址

举个实际例子验证:

a = None
b = None
print(a is b)  # 输出True,说明a和b是同一个对象

如果每次用None都新创建一个,那a is b会返回False,但实际是True,因为它们共享同一个“永生”对象。

这么做有啥好处?

  • 性能优化:少了很多引用计数修改的操作,尤其是频繁用到这些对象的场景
  • 避免bug:以前有些极端情况(比如多线程下修改引用计数)可能导致这些全局对象被误回收,现在完全不会有这问题
  • 逻辑更合理:这些对象本来就该一直存在,用“永生”标记正好匹配它们的生命周期

内容的提问来源于stack exchange,提问作者Talha Tayyab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 07:37:05