小编典典

==运算符实际上在Python词典上做什么?

python

考虑:

>>> a = {'foo': {'bar': 3}}
>>> b = {'foo': {'bar': 3}}
>>> a == b
True

据蟒蛇文档,你的确可以使用==辞书运营商。

这里到底发生了什么?Python是否递归检查字典的每个元素以确保相等?是否确保键完全匹配,并且值也完全匹配?

是否有文档确切说明==字典的含义?还是我必须实现自己的版本的相等性检查?

(如果==运算符起作用,为什么字典不能散列?也就是说,为什么我不能创建字典的set()或将字典用作字典键?)


阅读 222

收藏
2020-12-20

共1个答案

小编典典

Python递归检查字典的每个元素以确保相等。参见C
dict_equal()实现
,该实现检查每个键和值(假设字典的长度相同);如果字典b具有相同的键,则PyObject_RichCompareBool测试值是否也匹配;这本质上是一个递归调用。

字典不可散列,因为其__hash__属性设置为None,并且大多数字典都是
可变的 ,当用作字典键时是不允许的。

如果要使用字典作为键,并通过现有引用更改键,则该键将不再插入哈希表中的相同位置。现在,使用另一个相等的字典(等于未更改的字典或已更改的字典)尝试检索值将不再起作用,因为将选择错误的插槽,或者键将不再相等。

2020-12-20