Python 3.13中None对象引用计数固定不变的原因咨询
Python 3.13中None对象引用计数固定不变的原因咨询
嗨,这个现象其实是Python 3.13针对核心内置对象的一项优化导致的,咱们来具体说说:
你看到的4294967295是2^32 - 1(32位无符号整数的最大值),在Python 3.13里,像None、True、False这类全局唯一的核心内置对象,被标记为**“永生对象”**——它们从Python启动时就存在,并且永远不会被垃圾回收机制回收。
为了避免对这类永生对象做无意义的引用计数增减操作(毕竟它们的生命周期和Python解释器绑定,永远不会被销毁),开发者修改了它们的引用计数逻辑:调用sys.getrefcount()时直接返回这个最大值,而不再实际追踪引用的变化。这样做能减少不必要的性能开销,毕竟这些对象的引用数量根本不影响它们的存活状态。
而在Python 3.10中还没有这项优化,所以None的引用计数会正常随着绑定、删除操作增减,和普通对象的表现一致。
你可以再尝试创建更多指向None的变量或者容器,会发现引用计数依然保持4294967295,因为这个值已经是代表“永生”的标记,而非实际的引用数量了。
备注:内容来源于stack exchange,提问作者Amir reza Riahi
相关产品推荐
相关产品推荐

