为什么Python对False和True保持引用计数?
我在查看内置函数hasattr的源代码时,发现了几行让我感兴趣的内容:
Py_INCREF(Py_False);
return Py_False;
...
Py_INCREF(Py_True);
return Py_True;
难道Py_False
和Py_True
不是全局值吗?出于好奇,为什么Python要对这些变量保持引用计数呢?
1 个回答
23
这样做是为了让所有对象的处理方式统一。如果我在写C语言代码,处理一个函数的返回值时,我需要增加和减少那个对象的引用计数。如果函数返回的是True,我就不想去检查它是不是某个特殊对象,以决定是否要调整它的引用计数。这样我就可以把所有对象都当成一样来对待。
通过把True和False(还有None)当成和其他所有对象一样来处理,整个C语言代码就变得简单多了。