看到dict_values
是abc.Hashable
唯一的内置子类,它到目前为止我遇到了一个损坏的__eq__
方法,它让我觉得这是一个错误。虽然这个问题是大多数人永远不会遇到的问题,如果我没有将我的测试设置为正好用于我正在制作的可选择的lru缓存,我会错过这个。
它不仅不合逻辑,对初学者来说也很困惑,因为对于__repr__
比较相等的所有其他内置容器,对象比较相等。以下结果在版本3.3,3.4,3.5和3.6中是相同的:(甚至在3.3的纯{py}版collections.OrderedDict
中)。
>>> a = {1:1}
>>> b = {1:1}
>>> a == b
True
>>> a.items() == b.items()
True
>>> a.keys() == b.keys()
True
>>> a.values() == b.values()
False
>>> x, y = a.values(), b.values()
>>> x == y
False
>>> list(a.values()) == list(b.values())
True
>>> blank = {}
>>> for i in range(10):
blank[{}.values()] = i
>>> blank
{dict_values([]): 0, dict_values([]): 1, dict_values([]): 2, dict_values([]): 3, dict_values([]): 4, dict_values([]): 5, dict_values([]): 6, dict_values([]): 7, dict_values([]): 8, dict_values([]): 9}