Python dicts / lists不是可散列的,而是python对象。这对我来说似乎很奇怪,特别是因为python dicts和python对象在可变性的观点上几乎相同。
我有几个理论:
id
,并且python强制相等的实例必须具有相同的哈希。默认情况下,对象不会出现此行为,但如果__eq__
被覆盖这种语言功能的设计理由是什么?
评论更新: https://docs.python.org/3/glossary.html#term-hashable
这解释了为什么 dicts / lists无法自动播放
比较相等的Hashable对象必须具有相同的哈希值。
但为什么决定这条规则?
答案 0 :(得分:2)
好article解释了可出现和平等问题。 一般来说,我会说保留默认对象可以使用的决定是因为它涵盖了更多的案例并且仍然相当便宜。对dicts和list执行相同操作时,大多数情况下都会产生意外结果。