【问题标题】:Why does Python keep a reference count on False and True?为什么 Python 在 False 和 True 上保留引用计数?
【发布时间】:2010-11-30 10:25:23
【问题描述】:

我正在查看 hasattr 内置函数的源代码,并注意到有几行引起了我的兴趣:

Py_INCREF(Py_False);
return Py_False;

...

Py_INCREF(Py_True);
return Py_True;

Py_FalsePy_True 不是全局值吗?纯粹出于好奇,为什么 Python 保留这些变量的引用计数?

【问题讨论】:

  • @S.Lott 因为这里的问题必须与特定的具体编程问题相关。
  • 我目前遇到的问题是我不明白需要增加 Py_True 和 Py_False 的引用计数。
  • 我发现这类问题最有趣。太多的问题相当于,“我如何使这个特定的事情起作用?”,然后 OP 转向其他一些紧迫的问题。这个问题实际上会导致对整个系统有更深入的了解,从而更好地在该系统内进行编程。
  • @Chazadanga。哈哈,我觉得你很困惑。
  • @Chazadanga,该评论肯定是针对 S.Lott,否则毫无意义。

标签: python reference-counting python-c-api


【解决方案1】:

这是为了使所有对象处理统一。如果我正在编写处理函数返回值的 C 代码,我必须增加和减少该对象的引用计数。如果函数返回 True,我不想检查它是否是那些特殊对象之一来知道是否要操纵它的引用计数。我可以一视同仁地对待所有对象。

通过将 True 和 False(以及 None,顺便说一句)与所有其他对象相同,C 代码在整个过程中变得更加简单。

【讨论】:

  • 另外:T F 和 None 实际上是对象。他们只是没有任何方法。 docs.python.org/c-api/bool.html
  • 他们在技术上是有方法的。每个对象都有方法。
  • len(dir(True)) 是 54 -- 塞满 full 方法。它们都是特殊的(双下划线命名)。
  • 可能 Unladen Swallow 会改变这一点。这正是他们试图优化的东西。
  • “特殊情况不足以打破规则。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 2023-03-31
  • 1970-01-01
  • 2013-08-05
  • 2019-04-24
  • 2020-12-10
  • 1970-01-01
相关资源
最近更新 更多