dict
我注意到s 和OrderedDict
s之间的关系存在这种惊人的不一致。从文档:
OrderedDict 对象之间的相等性测试是顺序敏感的,并且实现为
list(od1.items())==list(od2.items())
. 对象和其他 Mapping 对象之间的相等性测试OrderedDict
与常规字典一样对顺序不敏感。这允许OrderedDict
在使用常规字典的任何地方替换对象。
这是一个问题,因为它违反了 equal 的传递性,如下所示。
我的问题:这是否有充分的理由(除了“......允许 OrderedDict 对象被替换......”)?是否有任何其他标准 python 类型违反了等式的传递属性?
以下测试应该都是等效的,但它们不是:
od1 = OrderedDict([(1,1), (2,2)])
od2 = OrderedDict([(2,2), (1,1)])
d = dict(od1)
d == od1 == od2 # False
od1 == d == od2 # True ...
od1 == od2 == d # False
在我看来,情况应该是这样的:
集合是有序的,即 order 是其值
dict
的一部分,在这种情况下,不应该定义与 unordered的比较(与比较 alist
和 a相同set
)在这种情况下,集合不是有序
od1==od2
的。该顺序仍然可以保持迭代,但不被视为value 的一部分。