【发布时间】:2019-12-15 09:54:23
【问题描述】:
根据我对 Python 的理解,由于元组是不可变的,它们应该是可散列的,hash() 函数应该对它们起作用。然而,情况似乎并非如此,因为当它们包含列表或字典等项目时,哈希函数会报错,如下所示。
这行得通:
>>> t = (1, 2, 'name', 'Subhayan', 'age', 32, 'sex', 'male')
>>> hash(t)
3584505648807432737
这不起作用:
>>> t = ({'First': 1, 'second': 2}, 'age', 32, 'sex', 'male', 'name', 'Subhayan')
>>> hash(t)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
所以我的问题是哈希函数在内部是如何运作的?它是否遍历元组并尝试散列各个组件?
谁能给我一些关于它是如何工作的参考。
【问题讨论】:
-
如果一个元组包含一个可变对象,它不得是可散列的。它可以更改其哈希值,使大多数依赖哈希函数的实现变得无用。