Commit edd21129 authored by Raymond Hettinger's avatar Raymond Hettinger Committed by GitHub

bpo-32118: Simplify docs for sequence comparison (GH-15450)

parent 5e63ab05
...@@ -1425,6 +1425,10 @@ built-in types. ...@@ -1425,6 +1425,10 @@ built-in types.
themselves. For example, if ``x = float('NaN')``, ``3 < x``, ``x < 3``, ``x themselves. For example, if ``x = float('NaN')``, ``3 < x``, ``x < 3``, ``x
== x``, ``x != x`` are all false. This behavior is compliant with IEEE 754. == x``, ``x != x`` are all false. This behavior is compliant with IEEE 754.
* ``None`` and ``NotImplemented`` are singletons. :PEP:`8` advises that
comparisons for singletons should always be done with ``is`` or ``is not``,
never the equality operators.
* Binary sequences (instances of :class:`bytes` or :class:`bytearray`) can be * Binary sequences (instances of :class:`bytes` or :class:`bytearray`) can be
compared within and across their types. They compare lexicographically using compared within and across their types. They compare lexicographically using
the numeric values of their elements. the numeric values of their elements.
...@@ -1442,25 +1446,9 @@ built-in types. ...@@ -1442,25 +1446,9 @@ built-in types.
:exc:`TypeError`. :exc:`TypeError`.
Sequences compare lexicographically using comparison of corresponding Sequences compare lexicographically using comparison of corresponding
elements, whereby reflexivity of the elements is enforced. elements. The built-in containers typically assume identical objects are
equal to themselves. That lets them bypass equality tests for identical
In enforcing reflexivity of elements, the comparison of collections assumes objects to improve performance and to maintain their internal invariants.
that for a collection element ``x``, ``x == x`` is always true. Based on
that assumption, element identity is compared first, and element comparison
is performed only for distinct elements. This approach yields the same
result as a strict element comparison would, if the compared elements are
reflexive. For non-reflexive elements, the result is different than for
strict element comparison, and may be surprising: The non-reflexive
not-a-number values for example result in the following comparison behavior
when used in a list::
>>> nan = float('NaN')
>>> nan is nan
True
>>> nan == nan
False <-- the defined non-reflexive behavior of NaN
>>> [nan] == [nan]
True <-- list enforces reflexivity and tests identity first
Lexicographical comparison between built-in collections works as follows: Lexicographical comparison between built-in collections works as follows:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment