根据我在Python中的理解,由于元组是不可变的,所以它们应该是散列的,hash()
函数应该对它们起作用。然而,情况似乎并非如此,因为当它们包含诸如列表或dicts之类的项时,哈希函数就会出现如下所示的问题。在
这是有效的:
>>> t = (1, 2, 'name', 'Subhayan', 'age', 32, 'sex', 'male')
>>> hash(t)
3584505648807432737
这不起作用:
^{pr2}$所以我的问题是散列函数如何在内部操作?它是否循环遍历元组并尝试散列各个组件?在
有人能给我一些参考资料吗。在
是的,不可变容器的哈希取包含对象的哈希。在
对于元组,请参见} function :
Objects/tupleobject.c
源代码,特别是^{在Python中,忽略C int类型溢出,等效值为:
^{pr2}$“幻数”是为了确保元组哈希为内容哈希中的小更改生成大范围的值。在
这毕竟是最符合逻辑的实现;哈希应该反映包含的值,当您针对另一个元组测试相等性时,所包含的值也会针对另一个元组中的对象进行测试;哈希和相等功能是密切相关的。在
元组可以引用任何类型的对象;元组本身不能被更改,但这并不意味着您不能更改它引用的对象。因此,元组的哈希能力取决于元组引用的对象的哈希能力。在
相关问题 更多 >
编程相关推荐