为什么自定义对象在python中可哈希化(并在dict中可用)?

亚历克斯

新手问题:为了使对象用作其中的键,dict必须是可哈希的。显然,不可变类型可以用作键,而可变类型则不能。但是,如果我定义了一个可变的类,显然它仍然可以用作键。在下面的代码中,my_obj是对包含类型的对象的内存插槽的引用RandomObject该内存插槽包含x对25的引用(),但是可以更改此引用以指向其他任何内容。这让我感到困惑,为什么行得通?此外,my_obj可以引用的全新实例RandomObject如果散列发生在实际对象(而不是引用的内存地址)上,这将如何工作?

class RandomObject:
    def __init__(self, x):
        self._x = x

d = {"hi": 1, "bye": 2}
my_obj = RandomObject(25)
d[my_obj] = 3
print(d)
#{'hi': 1, 'bye': 2, <__main__.RandomObject object at 0x0000000005B75D30>: 3}
user2357112支持Monica

您的课程继承了object.__eq__object.__hash__,它们通过身份进行工作。散列并不直接关心可变性;它只关心影响==比较的可变性==通过身份确认时,没有任何突变会影响==比较。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

类型化球拍中的自定义哈希集导致语法对象违反合同

如何序列化自定义对象列表并在Android中的onRestoreInstanceState上恢复它?

ArrayList中的自定义对象和可搜索

序列化json对象中的自定义对象

为什么可以修改自定义的ArrayList中的每个...对象循环

为什么我在ApplicationUser中的自定义对象属性为空?

为什么自定义用户对象(从PFUser子类化)中缺少字段?

滚动listview后,Android中的自定义listAdapter中替换的可绘制图像发生更改。为什么?

为什么 GA 中的自定义报告不更新?

为什么在自定义迭代器中返回 self ?

如何使TensorFlow中的自定义Op可导入Python?

自定义对象列表json在python中序列化

为什么我的自定义函数不能从 Python 中的文件编辑器执行?

为什么这些自定义函数在 Python 中打印不同的值?

在Powershell中定义自定义对象

如何在运行时自定义XML中定义的自定义可绘制对象?

具有自定义哈希行为的 Python 对象集

为什么在Spring MVC中自定义HttpMessageConverter?为什么我们需要自定义它?

为什么python中的日期时间对象的json序列化对于日期时间对象不可用

在Redis中存储自定义Python对象

如何从python集合中删除自定义对象的实例?

QML Python中的自定义对象引用

如何在python中打印自定义对象的数组?

在 Python 中从 YAML 创建自定义类的对象

在Swift中,键值编码是否可用于自定义对象而无需子类化NSObject?

如何创建可用于AngularJS中的方法的自定义对象类

全局对象在自定义模块中不可用,即使传入并请求也是如此

在C ++中,自定义数据类型的哈希应该返回什么?

为什么捆绑中的自定义js无法在自定义视图MVC5中显示