为什么Python将引用计数保持为False和True?

Jas*_*ker 21 python reference-counting python-c-api

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

Py_INCREF(Py_False);
return Py_False;

...

Py_INCREF(Py_True);
return Py_True;
Run Code Online (Sandbox Code Playgroud)

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

Ned*_*der 22

这是为了使所有对象处理均匀.如果我正在编写处理函数返回值的C代码,我必须递增和递减该对象的引用计数.如果函数返回True,我不想检查它是否是那些特殊对象之一,知道是否操纵它的引用计数.我可以完全相同地对待所有对象.

通过将True和False(和None,btw)视为与所有其他对象相同,C代码在整个过程中要简单得多.

  • *"特殊情况不足以打破规则."* (5认同)
  • len(dir(True))是54 - chock*full*of methods.它们只是所有特殊的(以双重下划线命名). (4认同)