]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-42345: Add whatsnew and versionchanged for typing.Literal in 3.9 (GH-23386)
authorkj <28750310+Fidget-Spinner@users.noreply.github.com>
Thu, 19 Nov 2020 17:37:26 +0000 (00:37 +0700)
committerGitHub <noreply@github.com>
Thu, 19 Nov 2020 17:37:26 +0000 (09:37 -0800)
* Whatsnew entry in 3.9 same as the one in 3.10.
* versionchanged for typing.Literal docs

Needs backport to 3.9.

Doc/library/typing.rst
Doc/whatsnew/3.9.rst

index 5b66e3c2c5b63955e053bb0d947553af1431a94c..67fd55e7b8a24f3932cdd3e71e4a6c0f5ee2435f 100644 (file)
@@ -674,6 +674,12 @@ These can be used as types in annotations using ``[]``, each having a unique syn
 
    .. versionadded:: 3.8
 
+   .. versionchanged:: 3.9.1
+      ``Literal`` now de-duplicates parameters.  Equality comparison of
+      ``Literal`` objects are no longer order dependent. ``Literal`` objects
+      will now raise a :exc:`TypeError` exception during equality comparisons
+      if one of their parameters are not :term:`immutable`.
+
 .. data:: ClassVar
 
    Special type construct to mark class variables.
index a601b16f1c60599d6a443d2a972178d782cf3526..b89faf101d04350f6cfd171e9e7fe67a2f850de6 100644 (file)
@@ -1454,3 +1454,32 @@ Removed
   ``PyNullImporter_Type``, ``PyCmpWrapper_Type``, ``PySortWrapper_Type``,
   ``PyNoArgsFunction``.
   (Contributed by Pablo Galindo Salgado in :issue:`39372`.)
+
+Notable changes in Python 3.9.1
+===============================
+
+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 respect 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`.)
\ No newline at end of file