Py学习  »  Python

Python如何散列itertools。count()?

Algebra8 • 4 年前 • 1749 次点击  

我试图理解背后的基本机制 hash(itertools.count(x, y)) .

我不习惯深入研究CPython的实现,但我注意到 itertoolsmodule.c 这个 static PyTypeObject count_type has 0 for tp_hash .

我假设这意味着它没有实施 hash 在C.那么,它是如何处理的呢?C绑定是否有Python对象 itertools.count 实现 __hash__ ?

另一方面,幕后发生了什么


itertools.count(0, 5) != itertools.count(0, 5)

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132000
文章 [ 1 ]  |  最新文章 4 年前
user2357112
Reply   •   1 楼
user2357112    5 年前

它只是继承了基于身份的默认设置 __hash__ 和 __eq__ 从…起 object .

引用 docs 对于 tp_hash :

继承:

分组:tp_hash,tp_richcompare

此字段由子类型与tp_richcompare一起继承:当子类型tp_richcompare和tp_hash都为空时,子类型同时继承tp_richcompare和tp_hash。

自从 tp_散列 和 tp_richcompare 都静态初始化为 0 , PyType_Ready 将 copy those fields 来自基类,默认为 对象 .