【问题标题】:How does Python hash itertools.count()?Python 如何散列 itertools.count()?
【发布时间】:2021-07-13 03:54:32
【问题描述】:

我正在尝试了解 hash(itertools.count(x, y)) 背后的基本机制。

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

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

另一方面,幕后发生的事情


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

【问题讨论】:

    标签: python python-3.x hash itertools


    【解决方案1】:

    它只是从object 继承了默认的基于身份的__hash____eq__

    tp_hash 引用docs

    继承:

    组:tp_hash、tp_richcompare

    该字段与 tp_richcompare 一起由子类型继承:当子类型的 tp_richcompare 和 tp_hash 均为 NULL 时,子类型同时继承 tp_richcompare 和 tp_hash。

    由于tp_hashtp_richcompare 都被静态初始化为0PyType_Ready 将来自基类的copy those fields,默认为object

    【讨论】:

    • 我明白了,所以任何时候 tp_hashtp_richcompare 为 NULL,然后使用对象的 tp_hashtp_richcompare。谢谢!然后我想我的问题的第二部分可以通过查看对象的tp_hash来回答?
    猜你喜欢
    • 2012-11-28
    • 2015-02-24
    • 2015-06-12
    • 2017-10-13
    • 2011-10-06
    • 2020-05-31
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    相关资源
    最近更新 更多