您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

我可以使用可变对象作为python中的字典键。这是不允许的吗?

我可以使用可变对象作为python中的字典键。这是不允许的吗?

具有方法的任何对象都可以是字典键。对于您编写的类,此方法认返回基于id(self)的值,并且如果相等性不是由这些类的标识决定的,则将它们用作键可能会让您感到惊讶:

>>> class A(object):
...   def __eq__(self, other):
...     return True
... 
>>> one, two = A(), A()
>>> d = {one: "one"}
>>> one == two
True
>>> d[one]
'one'
>>> d[two]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: <__main__.A object at 0xb718836c>

>>> hash(set())  # sets cannot be dict keys
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'

在2.6版中进行了更改:__hash__现在可以设置为None,以将类实例明确标记为不可哈希。[ ]

class Unhashable(object):
  __hash__ = None
python 2022/1/1 18:25:19 有424人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶