2012/10/4 Steven D'Aprano email@example.com:
On 04/10/12 21:48, Max Moroz wrote:
It seems that built-in classes do not short-circuit `__eq__` method when the objects are identical, at least in CPython:
f = frozenset(range(200000000)) f1 = f f1 == f # this operation will take about 1 sec on my machine
You shouldn't over-generalize. Some built-ins do short-circuit __eq__ when the objects are identical. I believe that strings and ints both do. Other types might not.
This optimization is not implemented for Unicode strings.
PyObject_RichCompareBool() implements this optimization which leads to incorrect results:
nan = float("nan") mytuple = (nan,) assert mytuple != mytuple # fails
I think that the optimization should be implemented for Unicode strings, but disabled in PyObject_RichCompareBool().
@Max Moroz: Can you please open an issue on bugs.python.org?