【发布时间】:2014-04-24 12:28:32
【问题描述】:
所以列表是不可散列的:
>>> { [1,2]:3 }
TypeError: unhashable type: 'list'
下面page给出解释:
列表是可变类型,不能用作字典中的键 (它可能会就地更改,使密钥不再位于 字典的内部哈希表)。
我理解为什么不希望使用可变对象作为字典键。但是,即使我只是尝试散列一个列表(独立于字典创建),Python 也会引发相同的异常
>>> hash( [1,2] )
TypeError: unhashable type: 'list'
Python 这样做是为了保证可变类型永远不会用作字典键吗?或者是否还有其他原因使可变对象无法散列,无论我打算如何使用它们?
【问题讨论】:
-
hash()只是调用对象的__hash__方法,而这正是dicts 所做的。 -
您打算对哈希做什么?动机是一个对象的哈希值不应该改变,相等的对象通常应该是相同的。
标签: python list dictionary hash python-internals