__hash__方法和文档。可能的错误?

时间:2014-06-16 16:27:52

标签: python python-3.x dictionary

阅读文档

  

object.__hash__(self)

     

由内置函数hash()调用,以及对散列集合成员的操作,包括set,frozenset和 dict 。 [...]

和....

  

所有Python的不可变内置对象都是可清除的,而没有可变容器(例如列表或词典)。

来自控制台:

>>> a = {'name': 'abcdef'}
>>> hash(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'

据我所知,dict对象不可清除,为什么文档说我可以在dict对象上调用hash函数?

2 个答案:

答案 0 :(得分:3)

  

由内置函数hash()调用,并对散列集合的成员进行操作,包括set,frozenset和dict。 [...]

__hash__在集合成员(或键)上调用,而不是在集合本身上调用。

答案 1 :(得分:2)

您误读了文档。

object.__hash__ [c]由内置函数hash()成员散列集合(包括set,frozenset和dict)进行操作。< / em>的

__hash__

dict 。它在dict成员上调用。

演示:

>>> class Hashable(object):
...     def __hash__(self):
...         print '__hash__ was called'
...         return super(Hashable, self).__hash__()
... 
>>> {Hashable(): None}
__hash__ was called
{<__main__.Hashable object at 0x10bce7750>: None}

因为Hashable()实例被用作键,所以在创建字典时会调用其__hash__方法。