我可以使用可变对象作为python中的字典键。这是不允许的吗?
具有方法的任何对象都可以是字典键。对于您编写的类,此方法默认返回基于id(self)的值,并且如果相等性不是由这些类的标识决定的,则将它们用作键可能会让您感到惊讶:
>>> class A(object):... def __eq__(self, other):... return True... >>> one, two = A(), A()>>> d = {one: 'one'}>>> one == twoTrue>>> 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 keysTraceback (most recent call last): File '<stdin>', line 1, in <module>TypeError: unhashable type: ’set’
在2.6版中进行了更改:__hash__现在可以设置为None,以将类实例明确标记为不可哈希。[]
class Unhashable(object): __hash__ = None解决方法
class A(object): x = 4i = A()d = {}d[i] = 2print di.x = 10print d
我以为只有不可变的对象才可以是字典键,但是上面的对象是可变的。
相关文章:
1. 正则表达式匹配${key}并在Java中使用的详细方法2. python 解决pycharm运行py文件只有unittest选项的问题3. Python通过fnmatch模块实现文件名匹配4. Android Studio 4.0 正式发布在Ubuntu 20.04中安装的方法5. 解决vue scoped scss 无效的问题6. 低版本IE正常运行HTML5+CSS3网站的3种解决方案7. python+adb+monkey实现Rom稳定性测试详解8. 关于python中readlines函数的参数hint的相关知识总结9. 基于Java实现简单贪吃蛇游戏10. log4net在Asp.net MVC4中的使用过程
