bpo-32118: Simplify docs for sequence comparison (GH-15450) (#15466)
(cherry picked from commit edd21129dd
)
Co-authored-by: Raymond Hettinger <rhettinger@users.noreply.github.com>
This commit is contained in:
parent
c410f381bf
commit
0ad85681de
|
@ -1425,6 +1425,10 @@ built-in types.
|
|||
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.
|
||||
|
||||
* ``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
|
||||
compared within and across their types. They compare lexicographically using
|
||||
the numeric values of their elements.
|
||||
|
@ -1442,25 +1446,9 @@ built-in types.
|
|||
:exc:`TypeError`.
|
||||
|
||||
Sequences compare lexicographically using comparison of corresponding
|
||||
elements, whereby reflexivity of the elements is enforced.
|
||||
|
||||
In enforcing reflexivity of elements, the comparison of collections assumes
|
||||
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
|
||||
elements. The built-in containers typically assume identical objects are
|
||||
equal to themselves. That lets them bypass equality tests for identical
|
||||
objects to improve performance and to maintain their internal invariants.
|
||||
|
||||
Lexicographical comparison between built-in collections works as follows:
|
||||
|
||||
|
|
Loading…
Reference in New Issue