What’s New In Python 3.10

Release

3.10.0a0

Date

May 28, 2020

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

For full details, see the 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

  • Builtin and extension functions that take integer arguments no longer accept Decimals, Fractions and other objects that can be converted to integers only with a loss (e.g. that have the __int__() method but do not have the __index__() method). (Contributed by Serhiy Storchaka in bpo-37999.)

New Modules

  • None yet.

Improved Modules

tracemalloc

Added tracemalloc.reset_peak() to set the peak size of traced memory blocks to the current size, to measure the peak of specific pieces of code. (Contributed by Huon Wilson in bpo-40630.)

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 PyNumber_Index() now always has exact type int. Previously, the result could have been an instance of a subclass of int. (Contributed by Serhiy Storchaka in bpo-40792.)

Porting to Python 3.10

  • Since 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 Py_SET_TYPE() (available since Python 3.9). (Contributed by Dong-hee Na in bpo-39573.)

  • Since 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 Py_SET_REFCNT() (available since Python 3.9). (Contributed by Victor Stinner in bpo-39573.)

  • Since 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 Py_SET_SIZE() (available since Python 3.9). (Contributed by Victor Stinner in bpo-39573.)

Removed