`dict().values in dict()` 在 Python 3.7 中失败但在 Python 3.11 中成功

`dict().values in dict()` fails in Python 3.7 but succeeds in Python 3.11

于 Python 3.7.13

dict().values in dict()

给予,

TypeError: unhashable type: 'dict'

于 Python 3.11,

dict().values in dict()

给予,

False

此更改的原因是什么?

表达式dict().values的结果是一个“方法包装器”;包含方法的对象 and 要调用该方法的对象。

如果你这样做,例如,

hash(dict().__str__)

你在 3.7 中得到异常,但在以后的版本中没有。不同之处在于函数 wrapper_hash in CPython which has changed 从散列包装对象——因此错误消息中的 'dict',即使我们没有(明确地)散列字典——改为使用它的标识。