【发布时间】:2020-03-30 13:46:23
【问题描述】:
下面当我尝试对列表进行哈希处理时,它给了我一个错误,但适用于一个元组。猜想它与不变性有关。有人可以详细解释一下吗?
列表
x = [1,2,3]
y = {x: 9}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
元组
z = (5,6)
y = {z: 89}
print(y)
{(5, 6): 89}
【问题讨论】:
-
是的,它是关于一个可变的列表。如果您将哈希值存储在某处(例如,作为
dict的一部分)然后您修改列表,那么它不再是有效的字典键。这并不意味着可变对象具有散列值是没有意义的,而是这样的散列值没有明确的解释,因此由程序员在整个应用程序中一致地实现这一点。 -
元组并不总是可散列的。 (1, 2, [3]) 不可散列,因为它的第三个元素不可散列。
-
@P.Camilleri 暗示元组上的
hash是递归的。这很有趣,我以前不知道。 -
@MarkRansom AFAIK,元组的哈希(基本上)只是通过首先对每个元素进行哈希计算,然后对这些结果执行
。这让你的元组是可散列的,只要每个内容都可以单独散列。
标签: python