为什么 Python 对 False 和 True 保留引用计数?
我正在查看 hasattr 内置函数的源代码,注意到有几行激起了我的兴趣:
Py_INCREF(Py_False);
return Py_False;
...
Py_INCREF(Py_True);
return Py_True;
Py_False
和 Py_True
不是全局值吗?纯粹出于好奇,为什么 Python 保留这些变量的引用计数?
I was looking at the source code to the hasattr built-in function and noticed a couple of lines that piqued my interest:
Py_INCREF(Py_False);
return Py_False;
...
Py_INCREF(Py_True);
return Py_True;
Aren't Py_False
and Py_True
global values? Just out of sheer curiosity, why is Python keeping a reference count for these variables?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是为了使所有对象处理统一。如果我正在编写处理函数返回值的 C 代码,则必须增加和减少该对象的引用计数。如果函数返回 True,我不想检查它是否是那些特殊对象之一,以了解是否操纵其引用计数。我可以一视同仁地对待所有物体。
通过将 True 和 False(以及 None,顺便说一句)视为与所有其他对象相同,C 代码自始至终都简单得多。
It's to make all object handling uniform. If I'm writing C code that handles a return value from a function, I have to increment and decrement the reference count on that object. If the function returns me True, I don't want to have to check to see if it's one of those special objects to know whether to manipulate its reference count. I can treat all objects identically.
By treating True and False (and None, btw) the same as all other objects, the C code is much simpler throughout.