mirror of
https://github.com/python/cpython.git
synced 2025-07-08 03:45:36 +00:00
gh-131933: Document UnionType/Union merger in What's New (#131941)
Co-authored-by: Alex Waygood Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
This commit is contained in:
parent
ac3a7bfecc
commit
7473c600a5
1 changed files with 53 additions and 0 deletions
|
@ -1075,6 +1075,54 @@ turtle
|
||||||
(Contributed by Marie Roald and Yngve Mardal Moe in :gh:`126350`.)
|
(Contributed by Marie Roald and Yngve Mardal Moe in :gh:`126350`.)
|
||||||
|
|
||||||
|
|
||||||
|
types
|
||||||
|
-----
|
||||||
|
|
||||||
|
* :class:`types.UnionType` is now an alias for :class:`typing.Union`.
|
||||||
|
See :ref:`below <whatsnew314-typing-union>` for more details.
|
||||||
|
(Contributed by Jelle Zijlstra in :gh:`105499`.)
|
||||||
|
|
||||||
|
|
||||||
|
typing
|
||||||
|
------
|
||||||
|
|
||||||
|
.. _whatsnew314-typing-union:
|
||||||
|
|
||||||
|
* :class:`types.UnionType` and :class:`typing.Union` are now aliases for each other,
|
||||||
|
meaning that both old-style unions (created with ``Union[int, str]``) and new-style
|
||||||
|
unions (``int | str``) now create instances of the same runtime type. This unifies
|
||||||
|
the behavior between the two syntaxes, but leads to some differences in behavior that
|
||||||
|
may affect users who introspect types at runtime:
|
||||||
|
|
||||||
|
- Both syntaxes for creating a union now produce the same string representation in
|
||||||
|
``repr()``. For example, ``repr(Union[int, str])``
|
||||||
|
is now ``"int | str"`` instead of ``"typing.Union[int, str]"``.
|
||||||
|
- Unions created using the old syntax are no longer cached. Previously, running
|
||||||
|
``Union[int, str]`` multiple times would return the same object
|
||||||
|
(``Union[int, str] is Union[int, str]`` would be ``True``), but now it will
|
||||||
|
return two different objects. Users should use ``==`` to compare unions for equality, not
|
||||||
|
``is``. New-style unions have never been cached this way.
|
||||||
|
This change could increase memory usage for some programs that use a large number of
|
||||||
|
unions created by subscripting ``typing.Union``. However, several factors offset this cost:
|
||||||
|
unions used in annotations are no longer evaluated by default in Python 3.14
|
||||||
|
because of :pep:`649`; an instance of :class:`types.UnionType` is
|
||||||
|
itself much smaller than the object returned by ``Union[]`` was on prior Python
|
||||||
|
versions; and removing the cache also saves some space. It is therefore
|
||||||
|
unlikely that this change will cause a significant increase in memory usage for most
|
||||||
|
users.
|
||||||
|
- Previously, old-style unions were implemented using the private class
|
||||||
|
``typing._UnionGenericAlias``. This class is no longer needed for the implementation,
|
||||||
|
but it has been retained for backward compatibility, with removal scheduled for Python
|
||||||
|
3.17. Users should use documented introspection helpers like :func:`typing.get_origin`
|
||||||
|
and :func:`typing.get_args` instead of relying on private implementation details.
|
||||||
|
- It is now possible to use :class:`typing.Union` itself in :func:`isinstance` checks.
|
||||||
|
For example, ``isinstance(int | str, typing.Union)`` will return ``True``; previously
|
||||||
|
this raised :exc:`TypeError`.
|
||||||
|
- The ``__args__`` attribute of :class:`typing.Union` objects is no longer writable.
|
||||||
|
|
||||||
|
(Contributed by Jelle Zijlstra in :gh:`105499`.)
|
||||||
|
|
||||||
|
|
||||||
unicodedata
|
unicodedata
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
|
@ -1608,6 +1656,11 @@ Changes in the Python API
|
||||||
This temporary change affects other threads.
|
This temporary change affects other threads.
|
||||||
(Contributed by Serhiy Storchaka in :gh:`69998`.)
|
(Contributed by Serhiy Storchaka in :gh:`69998`.)
|
||||||
|
|
||||||
|
* :class:`types.UnionType` is now an alias for :class:`typing.Union`,
|
||||||
|
causing changes in some behaviors.
|
||||||
|
See :ref:`above <whatsnew314-typing-union>` for more details.
|
||||||
|
(Contributed by Jelle Zijlstra in :gh:`105499`.)
|
||||||
|
|
||||||
|
|
||||||
Build changes
|
Build changes
|
||||||
=============
|
=============
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue