假设我写了一个类,但没有为其定义
然而,我没有在文档中看到这个值是如何被使用的。
因此,如果我的
所以,我的问题是:
如果有关系的话,我正在使用Python 2.7。
编辑:澄清一下,我不是在问如何处理哈希冲突。在Python中,这似乎是通过线性链接完成的。相反,我想知道
__hash__
。根据文档,__hash__(self)
将默认为id(self)
(即self
的内存地址)。然而,我没有在文档中看到这个值是如何被使用的。
因此,如果我的
__hash__
只是简单地返回1,这将导致我的类的所有实例的哈希值相同,它们都会被分配到同一个底层哈希桶中(我假设这是用C实现的)。但是,这并不意味着__hash__
的返回值被用作底层哈希表中元素的键。所以,我的问题是:
__hash__
返回的值会发生什么?它是直接用作键,还是其哈希值(或对其执行的某些其他计算的结果)用作哈希表的键?如果有关系的话,我正在使用Python 2.7。
编辑:澄清一下,我不是在问如何处理哈希冲突。在Python中,这似乎是通过线性链接完成的。相反,我想知道
__hash__
的返回值如何转换为相应桶的内存地址(?)。
__hash__
的输出如何转换为存储该对象的桶的内存位置。 - inspectorG4dget__hash__
只在对对象进行哈希(例如用于字典或集合)时使用。如果您从未以需要对其进行哈希的方式使用对象,则其__hash__
的内容并不重要。 - BrenBarn底层哈希桶(我假设是用C实现的)
,即Python字典的底层是一个哈希表(其中有桶),由C实现。 - inspectorG4dget