Raymond Hettinger <raymond.hettin...@gmail.com> added the comment:

> There are no specifications regarding the question.

>From the OrderedDict docs:

"""
Equality tests between OrderedDict objects are order-sensitive and are 
implemented as list(od1.items())==list(od2.items()). Equality tests between 
OrderedDict objects and other Mapping objects are order-insensitive like 
regular dictionaries. This allows OrderedDict objects to be substituted 
anywhere a regular dictionary is used.
"""

Also, there are tests to verify these behaviors.  From 
Lib/test/test_ordered_dict.py:

    def test_equality(self):
        OrderedDict = self.OrderedDict
        pairs = [('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)]
        shuffle(pairs)
        od1 = OrderedDict(pairs)
        od2 = OrderedDict(pairs)
        self.assertEqual(od1, od2)          # same order implies equality
        pairs = pairs[2:] + pairs[:2]
        od2 = OrderedDict(pairs)
        self.assertNotEqual(od1, od2)       # different order implies inequality
        # comparison to regular dict is not order sensitive
        self.assertEqual(od1, dict(od2))
        self.assertEqual(dict(od2), od1)
        # different length implied inequality
        self.assertNotEqual(od1, OrderedDict(pairs[:-1]))



> Raising exception is the best thing since it will show 
> real bug in applications.

Changing the implementation now will break correct code that relies the 
documented behavior.  The change would also violate an intentional day one 
design goal to have ordered dictionaries be substitutable for regular dicts in 
existing code that may not have any concept of order.  Per PEP 372:

"""
Is the ordered dict a dict subclass? Why?

Yes. Like defaultdict, an ordered dictionary subclasses dict. Being a dict 
subclass make some of the methods faster (like __getitem__ and __len__). More 
importantly, being a dict subclass lets ordered dictionaries be usable with 
tools like json that insist on having dict inputs by testing isinstance(d, dict)
"""



> I don't agree.

That's not relevant.  The time to debate the merits of this API passed 13 years 
ago.  Guido made the final decision on the equality logic.  And now that the 
code is deployed and widely adopted, it is far too late to change it.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue43691>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to