为什么 Python 对 False 和 True 保留引用计数?

发布于 2024-08-05 08:30:37 字数 242 浏览 5 评论 0原文

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

Py_INCREF(Py_False);
return Py_False;

...

Py_INCREF(Py_True);
return Py_True;

Py_FalsePy_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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

风和你 2024-08-12 08:30:37

这是为了使所有对象处理统一。如果我正在编写处理函数返回值的 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文