]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-42345: Add whatsnew for typing.Literal in 3.10 (GH-23385)
authorkj <28750310+Fidget-Spinner@users.noreply.github.com>
Thu, 19 Nov 2020 04:44:24 +0000 (11:44 +0700)
committerGitHub <noreply@github.com>
Thu, 19 Nov 2020 04:44:24 +0000 (20:44 -0800)
Doc/whatsnew/3.10.rst

index 95594413440b85ae03978910ab6dc230d52cd205..ad0ec4def0b70ba45a5b20b166db19da5a3735d1 100644 (file)
@@ -300,6 +300,32 @@ and :data:`types.NotImplementedType` classes, providing a new set
 of types readily interpretable by type checkers.
 (Contributed by Bas van Beek in :issue:`41810`.)
 
+typing
+------
+
+The behavior of :class:`typing.Literal` was changed to conform with :pep:`586`
+and to match the behavior of static type checkers specified in the PEP.
+
+1. ``Literal`` now de-duplicates parameters.
+2. Equality comparisons between ``Literal`` objects are now order independent.
+3. ``Literal`` comparisons now respects types.  For example,
+   ``Literal[0] == Literal[False]`` previously evaluated to ``True``.  It is
+   now ``False``.  To support this change, the internally used type cache now
+   supports differentiating types.
+4. ``Literal`` objects will now raise a :exc:`TypeError` exception during
+   equality comparisons if one of their parameters are not :term:`immutable`.
+   Note that declaring ``Literal`` with mutable parameters will not throw
+   an error::
+
+      >>> from typing import Literal
+      >>> Literal[{0}]
+      >>> Literal[{0}] == Literal[{False}]
+      Traceback (most recent call last):
+        File "<stdin>", line 1, in <module>
+      TypeError: unhashable type: 'set'
+
+(Contributed by Yurii Karabas in :issue:`42345`.)
+
 unittest
 --------