Skip to content

Latest commit

 

History

History
186 lines (122 loc) · 5.58 KB

File metadata and controls

186 lines (122 loc) · 5.58 KB

What's New In Python 3.10

Release:|release|
Date: |today|

This article explains the new features in Python 3.10, compared to 3.9.

For full details, see the :ref:`changelog <changelog>`.

Note

Prerelease users should be aware that this document is currently in draft form. It will be updated substantially as Python 3.10 moves towards release, so it's worth checking back even after reading earlier versions.

Summary -- Release highlights

New Features

Other Language Changes

New Modules

  • None yet.

Improved Modules

Optimizations

Deprecated

Removed

Porting to Python 3.10

This section lists previously described changes and other bugfixes that may require changes to your code.

Build Changes

C API Changes

New Features

The result of :c:func:`PyNumber_Index` now always has exact type :class:`int`. Previously, the result could have been an instance of a subclass of int. (Contributed by Serhiy Storchaka in :issue:`40792`.)

Porting to Python 3.10

  • Since :c:func:`Py_TYPE()` is changed to the inline static function, Py_TYPE(obj) = new_type must be replaced with Py_SET_TYPE(obj, new_type): see :c:func:`Py_SET_TYPE()` (available since Python 3.9). For backward compatibility, this macro can be used:

    #if PY_VERSION_HEX < 0x030900A4
    #  define Py_SET_TYPE(obj, type) ((Py_TYPE(obj) = (type)), (void)0)
    #endif
    

    (Contributed by Dong-hee Na in :issue:`39573`.)

  • Since :c:func:`Py_REFCNT()` is changed to the inline static function, Py_REFCNT(obj) = new_refcnt must be replaced with Py_SET_REFCNT(obj, new_refcnt): see :c:func:`Py_SET_REFCNT()` (available since Python 3.9). For backward compatibility, this macro can be used:

    #if PY_VERSION_HEX < 0x030900A4
    #  define Py_SET_REFCNT(obj, refcnt) ((Py_REFCNT(obj) = (refcnt)), (void)0)
    #endif
    

    (Contributed by Victor Stinner in :issue:`39573`.)

  • Since :c:func:`Py_SIZE()` is changed to the inline static function, Py_SIZE(obj) = new_size must be replaced with Py_SET_SIZE(obj, new_size): see :c:func:`Py_SET_SIZE()` (available since Python 3.9). For backward compatibility, this macro can be used:

    #if PY_VERSION_HEX < 0x030900A4
    #  define Py_SET_SIZE(obj, size) ((Py_SIZE(obj) = (size)), (void)0)
    #endif
    

    (Contributed by Victor Stinner in :issue:`39573`.)

  • Calling :c:func:`PyDict_GetItem` without :term:`GIL` held had been allowed for historical reason. It is no longer allowed. (Contributed by Victor Stinner in :issue:`40839`.)

Removed