• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1****************************
2  What's New In Python 3.9
3****************************
4
5:Editor: Łukasz Langa
6
7.. Rules for maintenance:
8
9   * Anyone can add text to this document.  Your text might get
10   rewritten to some degree.
11
12   * The maintainer will go through Misc/NEWS periodically and add
13   changes; it's therefore more important to add your changes to
14   Misc/NEWS than to this file.
15
16   * This is not a complete list of every single change; completeness
17   is the purpose of Misc/NEWS.  Some changes will be too small
18   or esoteric to include.  If such a change is added to the text,
19   it might get removed during final editing.
20
21   * If you want to draw your new text to the attention of the
22   maintainer, add 'XXX' to the beginning of the paragraph or
23   section.
24
25   * It's OK to just add a fragmentary note about a change.  For
26   example: "XXX Describe the transmogrify() function added to the
27   socket module."  The maintainer will research the change and
28   write the necessary text.
29
30   * You can comment out your additions if you like, but it's not
31   necessary (especially when a final release is some months away).
32
33   * Credit the author of a patch or bugfix.   Just the name is
34   sufficient; the e-mail address isn't necessary.
35
36   * It's helpful to add the bug/patch number as a comment:
37
38   XXX Describe the transmogrify() function added to the socket
39   module.
40   (Contributed by P.Y. Developer in :issue:`12345`.)
41
42   This saves the maintainer the effort of going through the Mercurial log
43   when researching a change.
44
45This article explains the new features in Python 3.9, compared to 3.8.
46Python 3.9 was released on October 5, 2020.
47For full details, see the :ref:`changelog <changelog>`.
48
49.. seealso::
50
51    :pep:`596` - Python 3.9 Release Schedule
52
53
54Summary -- Release highlights
55=============================
56
57.. This section singles out the most important changes in Python 3.9.
58   Brevity is key.
59
60New syntax features:
61
62* :pep:`584`, union operators added to ``dict``;
63* :pep:`585`, type hinting generics in standard collections;
64* :pep:`614`, relaxed grammar restrictions on decorators.
65
66New built-in features:
67
68* :pep:`616`, string methods to remove prefixes and suffixes.
69
70New features in the standard library:
71
72* :pep:`593`, flexible function and variable annotations;
73* :func:`os.pidfd_open` added that allows process management without races
74  and signals.
75
76Interpreter improvements:
77
78* :pep:`573`, fast access to module state from methods of C extension
79  types;
80* :pep:`617`, CPython now uses a new parser based on PEG;
81* a number of Python builtins (range, tuple, set, frozenset, list, dict) are
82  now sped up using :pep:`590` vectorcall;
83* garbage collection does not block on resurrected objects;
84* a number of Python modules (:mod:`!_abc`, :mod:`!audioop`, :mod:`!_bz2`,
85  :mod:`!_codecs`, :mod:`!_contextvars`, :mod:`!_crypt`, :mod:`!_functools`,
86  :mod:`!_json`, :mod:`!_locale`, :mod:`math`, :mod:`operator`, :mod:`resource`,
87  :mod:`time`, :mod:`!_weakref`) now use multiphase initialization as defined
88  by PEP 489;
89* a number of standard library modules (:mod:`!audioop`, :mod:`ast`, :mod:`grp`,
90  :mod:`!_hashlib`, :mod:`pwd`, :mod:`!_posixsubprocess`, :mod:`random`,
91  :mod:`select`, :mod:`struct`, :mod:`termios`, :mod:`zlib`) are now using
92  the stable ABI defined by PEP 384.
93
94New library modules:
95
96* :pep:`615`, the IANA Time Zone Database is now present in the standard
97  library in the :mod:`zoneinfo` module;
98* an implementation of a topological sort of a graph is now provided in
99  the new :mod:`graphlib` module.
100
101Release process changes:
102
103* :pep:`602`, CPython adopts an annual release cycle.
104
105
106You should check for DeprecationWarning in your code
107====================================================
108
109When Python 2.7 was still supported, a lot of functionality in Python 3
110was kept for backward compatibility with Python 2.7. With the end of Python
1112 support, these backward compatibility layers have been removed, or will
112be removed soon. Most of them emitted a :exc:`DeprecationWarning` warning for
113several years. For example, using ``collections.Mapping`` instead of
114``collections.abc.Mapping`` emits a :exc:`DeprecationWarning` since Python
1153.3, released in 2012.
116
117Test your application with the :option:`-W` ``default`` command-line option to see
118:exc:`DeprecationWarning` and :exc:`PendingDeprecationWarning`, or even with
119:option:`-W` ``error`` to treat them as errors. :ref:`Warnings Filter
120<warning-filter>` can be used to ignore warnings from third-party code.
121
122Python 3.9 is the last version providing those Python 2 backward compatibility
123layers, to give more time to Python projects maintainers to organize the
124removal of the Python 2 support and add support for Python 3.9.
125
126Aliases to :ref:`Abstract Base Classes <collections-abstract-base-classes>` in
127the :mod:`collections` module, like ``collections.Mapping`` alias to
128:class:`collections.abc.Mapping`, are kept for one last release for backward
129compatibility. They will be removed from Python 3.10.
130
131More generally, try to run your tests in the :ref:`Python Development Mode
132<devmode>` which helps to prepare your code to make it compatible with the
133next Python version.
134
135Note: a number of pre-existing deprecations were removed in this version of
136Python as well. Consult the :ref:`removed-in-python-39` section.
137
138
139New Features
140============
141
142Dictionary Merge & Update Operators
143-----------------------------------
144
145Merge (``|``) and update (``|=``) operators have been added to the built-in
146:class:`dict` class. Those complement the existing ``dict.update`` and
147``{**d1, **d2}`` methods of merging dictionaries.
148
149Example::
150
151  >>> x = {"key1": "value1 from x", "key2": "value2 from x"}
152  >>> y = {"key2": "value2 from y", "key3": "value3 from y"}
153  >>> x | y
154  {'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}
155  >>> y | x
156  {'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}
157
158See :pep:`584` for a full description.
159(Contributed by Brandt Bucher in :issue:`36144`.)
160
161New String Methods to Remove Prefixes and Suffixes
162--------------------------------------------------
163
164:meth:`str.removeprefix(prefix)<str.removeprefix>` and
165:meth:`str.removesuffix(suffix)<str.removesuffix>` have been added
166to easily remove an unneeded prefix or a suffix from a string. Corresponding
167``bytes``, ``bytearray``, and ``collections.UserString`` methods have also been
168added. See :pep:`616` for a full description. (Contributed by Dennis Sweeney in
169:issue:`39939`.)
170
171Type Hinting Generics in Standard Collections
172---------------------------------------------
173
174In type annotations you can now use built-in collection types such as
175``list`` and ``dict`` as generic types instead of importing the
176corresponding capitalized types (e.g. ``List`` or ``Dict``) from
177``typing``.  Some other types in the standard library are also now generic,
178for example ``queue.Queue``.
179
180Example:
181
182.. code-block:: python
183
184   def greet_all(names: list[str]) -> None:
185       for name in names:
186           print("Hello", name)
187
188See :pep:`585` for more details.  (Contributed by Guido van Rossum,
189Ethan Smith, and Batuhan Taşkaya in :issue:`39481`.)
190
191New Parser
192----------
193
194Python 3.9 uses a new parser, based on `PEG
195<https://en.wikipedia.org/wiki/Parsing_expression_grammar>`_ instead
196of `LL(1) <https://en.wikipedia.org/wiki/LL_parser>`_.  The new
197parser's performance is roughly comparable to that of the old parser,
198but the PEG formalism is more flexible than LL(1) when it comes to
199designing new language features.  We'll start using this flexibility
200in Python 3.10 and later.
201
202The :mod:`ast` module uses the new parser and produces the same AST as
203the old parser.
204
205In Python 3.10, the old parser will be deleted and so will all
206functionality that depends on it (primarily the :mod:`!parser` module,
207which has long been deprecated).  In Python 3.9 *only*, you can switch
208back to the LL(1) parser using a command line switch (``-X
209oldparser``) or an environment variable (``PYTHONOLDPARSER=1``).
210
211See :pep:`617` for more details.  (Contributed by Guido van Rossum,
212Pablo Galindo and Lysandros Nikolaou in :issue:`40334`.)
213
214
215Other Language Changes
216======================
217
218* :func:`__import__` now raises :exc:`ImportError` instead of
219  :exc:`ValueError`, which used to occur when a relative import went past
220  its top-level package.
221  (Contributed by Ngalim Siregar in :issue:`37444`.)
222
223* Python now gets the absolute path of the script filename specified on
224  the command line (ex: ``python3 script.py``): the ``__file__`` attribute of
225  the :mod:`__main__` module became an absolute path, rather than a relative
226  path. These paths now remain valid after the current directory is changed
227  by :func:`os.chdir`. As a side effect, the traceback also displays the
228  absolute path for :mod:`__main__` module frames in this case.
229  (Contributed by Victor Stinner in :issue:`20443`.)
230
231* In the :ref:`Python Development Mode <devmode>` and in :ref:`debug build <debug-build>`, the
232  *encoding* and *errors* arguments are now checked for string encoding and
233  decoding operations. Examples: :func:`open`, :meth:`str.encode` and
234  :meth:`bytes.decode`.
235
236  By default, for best performance, the *errors* argument is only checked at
237  the first encoding/decoding error and the *encoding* argument is sometimes
238  ignored for empty strings.
239  (Contributed by Victor Stinner in :issue:`37388`.)
240
241* ``"".replace("", s, n)`` now returns ``s`` instead of an empty string for
242  all non-zero ``n``.  It is now consistent with ``"".replace("", s)``.
243  There are similar changes for :class:`bytes` and :class:`bytearray` objects.
244  (Contributed by Serhiy Storchaka in :issue:`28029`.)
245
246* Any valid expression can now be used as a :term:`decorator`.  Previously, the
247  grammar was much more restrictive.  See :pep:`614` for details.
248  (Contributed by Brandt Bucher in :issue:`39702`.)
249
250* Improved help for the :mod:`typing` module. Docstrings are now shown for
251  all special forms and special generic aliases (like ``Union`` and ``List``).
252  Using :func:`help` with generic alias like ``List[int]`` will show the help
253  for the correspondent concrete type (``list`` in this case).
254  (Contributed by Serhiy Storchaka in :issue:`40257`.)
255
256* Parallel running of :meth:`~agen.aclose` / :meth:`~agen.asend` /
257  :meth:`~agen.athrow` is now prohibited, and ``ag_running`` now reflects
258  the actual running status of the async generator.
259  (Contributed by Yury Selivanov in :issue:`30773`.)
260
261* Unexpected errors in calling the ``__iter__`` method are no longer masked by
262  ``TypeError`` in the :keyword:`in` operator and functions
263  :func:`~operator.contains`, :func:`~operator.indexOf` and
264  :func:`~operator.countOf` of the :mod:`operator` module.
265  (Contributed by Serhiy Storchaka in :issue:`40824`.)
266
267* Unparenthesized lambda expressions can no longer be the expression part in an
268  ``if`` clause in comprehensions and generator expressions. See :issue:`41848`
269  and :issue:`43755` for details.
270
271
272New Modules
273===========
274
275zoneinfo
276--------
277
278The :mod:`zoneinfo` module brings support for the IANA time zone database to
279the standard library. It adds :class:`zoneinfo.ZoneInfo`, a concrete
280:class:`datetime.tzinfo` implementation backed by the system's time zone data.
281
282Example::
283
284    >>> from zoneinfo import ZoneInfo
285    >>> from datetime import datetime, timedelta
286
287    >>> # Daylight saving time
288    >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
289    >>> print(dt)
290    2020-10-31 12:00:00-07:00
291    >>> dt.tzname()
292    'PDT'
293
294    >>> # Standard time
295    >>> dt += timedelta(days=7)
296    >>> print(dt)
297    2020-11-07 12:00:00-08:00
298    >>> print(dt.tzname())
299    PST
300
301
302As a fall-back source of data for platforms that don't ship the IANA database,
303the :pypi:`tzdata` module was released as a first-party package -- distributed via
304PyPI and maintained by the CPython core team.
305
306.. seealso::
307
308    :pep:`615` -- Support for the IANA Time Zone Database in the Standard Library
309        PEP written and implemented by Paul Ganssle
310
311
312graphlib
313---------
314
315A new module, :mod:`graphlib`, was added that contains the
316:class:`graphlib.TopologicalSorter` class to offer functionality to perform
317topological sorting of graphs. (Contributed by Pablo Galindo, Tim Peters and
318Larry Hastings in :issue:`17005`.)
319
320
321Improved Modules
322================
323
324ast
325---
326
327Added the *indent* option to :func:`~ast.dump` which allows it to produce a
328multiline indented output.
329(Contributed by Serhiy Storchaka in :issue:`37995`.)
330
331Added :func:`ast.unparse` as a function in the :mod:`ast` module that can
332be used to unparse an :class:`ast.AST` object and produce a string with code
333that would produce an equivalent :class:`ast.AST` object when parsed.
334(Contributed by Pablo Galindo and Batuhan Taskaya in :issue:`38870`.)
335
336Added docstrings to AST nodes that contains the ASDL signature used to
337construct that node. (Contributed by Batuhan Taskaya in :issue:`39638`.)
338
339asyncio
340-------
341
342Due to significant security concerns, the *reuse_address* parameter of
343:meth:`asyncio.loop.create_datagram_endpoint` is no longer supported. This is
344because of the behavior of the socket option ``SO_REUSEADDR`` in UDP. For more
345details, see the documentation for ``loop.create_datagram_endpoint()``.
346(Contributed by Kyle Stanley, Antoine Pitrou, and Yury Selivanov in
347:issue:`37228`.)
348
349Added a new :term:`coroutine` :meth:`~asyncio.loop.shutdown_default_executor`
350that schedules a shutdown for the default executor that waits on the
351:class:`~concurrent.futures.ThreadPoolExecutor` to finish closing. Also,
352:func:`asyncio.run` has been updated to use the new :term:`coroutine`.
353(Contributed by Kyle Stanley in :issue:`34037`.)
354
355Added :class:`asyncio.PidfdChildWatcher`, a Linux-specific child watcher
356implementation that polls process file descriptors. (:issue:`38692`)
357
358Added a new :term:`coroutine` :func:`asyncio.to_thread`. It is mainly used for
359running IO-bound functions in a separate thread to avoid blocking the event
360loop, and essentially works as a high-level version of
361:meth:`~asyncio.loop.run_in_executor` that can directly take keyword arguments.
362(Contributed by Kyle Stanley and Yury Selivanov in :issue:`32309`.)
363
364When cancelling the task due to a timeout, :meth:`asyncio.wait_for` will now
365wait until the cancellation is complete also in the case when *timeout* is
366<= 0, like it does with positive timeouts.
367(Contributed by Elvis Pranskevichus in :issue:`32751`.)
368
369:mod:`asyncio` now raises :exc:`TypeError` when calling incompatible
370methods with an :class:`ssl.SSLSocket` socket.
371(Contributed by Ido Michael in :issue:`37404`.)
372
373compileall
374----------
375
376Added new possibility to use hardlinks for duplicated ``.pyc`` files: *hardlink_dupes* parameter and --hardlink-dupes command line option.
377(Contributed by  Lumír 'Frenzy' Balhar in :issue:`40495`.)
378
379Added new options for path manipulation in resulting ``.pyc`` files: *stripdir*, *prependdir*, *limit_sl_dest* parameters and -s, -p, -e command line options.
380Added the possibility to specify the option for an optimization level multiple times.
381(Contributed by Lumír 'Frenzy' Balhar in :issue:`38112`.)
382
383concurrent.futures
384------------------
385
386Added a new *cancel_futures* parameter to
387:meth:`concurrent.futures.Executor.shutdown` that cancels all pending futures
388which have not started running, instead of waiting for them to complete before
389shutting down the executor.
390(Contributed by Kyle Stanley in :issue:`39349`.)
391
392Removed daemon threads from :class:`~concurrent.futures.ThreadPoolExecutor`
393and :class:`~concurrent.futures.ProcessPoolExecutor`. This improves
394compatibility with subinterpreters and predictability in their shutdown
395processes. (Contributed by Kyle Stanley in :issue:`39812`.)
396
397Workers in :class:`~concurrent.futures.ProcessPoolExecutor` are now spawned on
398demand, only when there are no available idle workers to reuse. This optimizes
399startup overhead and reduces the amount of lost CPU time to idle workers.
400(Contributed by Kyle Stanley in :issue:`39207`.)
401
402curses
403------
404
405Added :func:`curses.get_escdelay`, :func:`curses.set_escdelay`,
406:func:`curses.get_tabsize`, and :func:`curses.set_tabsize` functions.
407(Contributed by Anthony Sottile in :issue:`38312`.)
408
409datetime
410--------
411The :meth:`~datetime.date.isocalendar` of :class:`datetime.date`
412and :meth:`~datetime.datetime.isocalendar` of :class:`datetime.datetime`
413methods now returns a :func:`~collections.namedtuple` instead of a :class:`tuple`.
414(Contributed by Donghee Na in :issue:`24416`.)
415
416distutils
417---------
418
419The :command:`upload` command now creates SHA2-256 and Blake2b-256 hash
420digests. It skips MD5 on platforms that block MD5 digest.
421(Contributed by Christian Heimes in :issue:`40698`.)
422
423fcntl
424-----
425
426Added constants :const:`~fcntl.F_OFD_GETLK`, :const:`~fcntl.F_OFD_SETLK`
427and :const:`~fcntl.F_OFD_SETLKW`.
428(Contributed by Donghee Na in :issue:`38602`.)
429
430ftplib
431-------
432
433:class:`~ftplib.FTP` and :class:`~ftplib.FTP_TLS` now raise a :class:`ValueError`
434if the given timeout for their constructor is zero to prevent the creation of
435a non-blocking socket. (Contributed by Donghee Na in :issue:`39259`.)
436
437gc
438--
439
440When the garbage collector makes a collection in which some objects resurrect
441(they are reachable from outside the isolated cycles after the finalizers have
442been executed), do not block the collection of all objects that are still
443unreachable. (Contributed by Pablo Galindo and Tim Peters in :issue:`38379`.)
444
445Added a new function :func:`gc.is_finalized` to check if an object has been
446finalized by the garbage collector. (Contributed by Pablo Galindo in
447:issue:`39322`.)
448
449hashlib
450-------
451
452The :mod:`hashlib` module can now use SHA3 hashes and SHAKE XOF from OpenSSL
453when available.
454(Contributed by Christian Heimes in :issue:`37630`.)
455
456Builtin hash modules can now be disabled with
457``./configure --without-builtin-hashlib-hashes`` or selectively enabled with
458e.g. ``./configure --with-builtin-hashlib-hashes=sha3,blake2`` to force use
459of OpenSSL based implementation.
460(Contributed by Christian Heimes in :issue:`40479`)
461
462
463http
464----
465
466HTTP status codes ``103 EARLY_HINTS``, ``418 IM_A_TEAPOT`` and ``425 TOO_EARLY`` are added to
467:class:`http.HTTPStatus`. (Contributed by Donghee Na in :issue:`39509` and Ross Rhodes in :issue:`39507`.)
468
469IDLE and idlelib
470----------------
471
472Added option to toggle cursor blink off.  (Contributed by Zackery Spytz
473in :issue:`4603`.)
474
475Escape key now closes IDLE completion windows.  (Contributed by Johnny
476Najera in :issue:`38944`.)
477
478Added keywords to module name completion list.  (Contributed by Terry J.
479Reedy in :issue:`37765`.)
480
481New in 3.9 maintenance releases
482
483Make IDLE invoke :func:`sys.excepthook` (when started without '-n').
484User hooks were previously ignored.  (Contributed by Ken Hilton in
485:issue:`43008`.)
486
487The changes above have been backported to 3.8 maintenance releases.
488
489Rearrange the settings dialog.  Split the General tab into Windows
490and Shell/Ed tabs.  Move help sources, which extend the Help menu, to the
491Extensions tab.  Make space for new options and shorten the dialog. The
492latter makes the dialog better fit small screens.  (Contributed by Terry Jan
493Reedy in :issue:`40468`.)  Move the indent space setting from the Font tab to
494the new Windows tab.  (Contributed by Mark Roseman and Terry Jan Reedy in
495:issue:`33962`.)
496
497Apply syntax highlighting to ``.pyi`` files. (Contributed by Alex
498Waygood and Terry Jan Reedy in :issue:`45447`.)
499
500imaplib
501-------
502
503:class:`~imaplib.IMAP4` and :class:`~imaplib.IMAP4_SSL` now have
504an optional *timeout* parameter for their constructors.
505Also, the :meth:`~imaplib.IMAP4.open` method now has an optional *timeout* parameter
506with this change. The overridden methods of :class:`~imaplib.IMAP4_SSL` and
507:class:`~imaplib.IMAP4_stream` were applied to this change.
508(Contributed by Donghee Na in :issue:`38615`.)
509
510:meth:`imaplib.IMAP4.unselect` is added.
511:meth:`imaplib.IMAP4.unselect` frees server's resources associated with the
512selected mailbox and returns the server to the authenticated
513state. This command performs the same actions as :meth:`imaplib.IMAP4.close`, except
514that no messages are permanently removed from the currently
515selected mailbox. (Contributed by Donghee Na in :issue:`40375`.)
516
517importlib
518---------
519
520To improve consistency with import statements, :func:`importlib.util.resolve_name`
521now raises :exc:`ImportError` instead of :exc:`ValueError` for invalid relative
522import attempts.
523(Contributed by Ngalim Siregar in :issue:`37444`.)
524
525Import loaders which publish immutable module objects can now publish
526immutable packages in addition to individual modules.
527(Contributed by Dino Viehland in :issue:`39336`.)
528
529Added :func:`importlib.resources.files` function with support for
530subdirectories in package data, matching backport in ``importlib_resources``
531version 1.5.
532(Contributed by Jason R. Coombs in :issue:`39791`.)
533
534Refreshed ``importlib.metadata`` from ``importlib_metadata`` version 1.6.1.
535
536inspect
537-------
538
539:attr:`inspect.BoundArguments.arguments` is changed from ``OrderedDict`` to regular
540dict.  (Contributed by Inada Naoki in :issue:`36350` and :issue:`39775`.)
541
542ipaddress
543---------
544
545:mod:`ipaddress` now supports IPv6 Scoped Addresses (IPv6 address with suffix ``%<scope_id>``).
546
547Scoped IPv6 addresses can be parsed using :class:`ipaddress.IPv6Address`.
548If present, scope zone ID is available through the :attr:`~ipaddress.IPv6Address.scope_id` attribute.
549(Contributed by Oleksandr Pavliuk in :issue:`34788`.)
550
551Starting with Python 3.9.5 the :mod:`ipaddress` module no longer
552accepts any leading zeros in IPv4 address strings.
553(Contributed by Christian Heimes in :issue:`36384`).
554
555math
556----
557
558Expanded the :func:`math.gcd` function to handle multiple arguments.
559Formerly, it only supported two arguments.
560(Contributed by Serhiy Storchaka in :issue:`39648`.)
561
562Added :func:`math.lcm`: return the least common multiple of specified arguments.
563(Contributed by Mark Dickinson, Ananthakrishnan and Serhiy Storchaka in
564:issue:`39479` and :issue:`39648`.)
565
566Added :func:`math.nextafter`: return the next floating-point value after *x*
567towards *y*.
568(Contributed by Victor Stinner in :issue:`39288`.)
569
570Added :func:`math.ulp`: return the value of the least significant bit
571of a float.
572(Contributed by Victor Stinner in :issue:`39310`.)
573
574multiprocessing
575---------------
576
577The :class:`multiprocessing.SimpleQueue` class has a new
578:meth:`~multiprocessing.SimpleQueue.close` method to explicitly close the
579queue.
580(Contributed by Victor Stinner in :issue:`30966`.)
581
582nntplib
583-------
584
585:class:`!NNTP` and :class:`!NNTP_SSL` now raise a :class:`ValueError`
586if the given timeout for their constructor is zero to prevent the creation of
587a non-blocking socket. (Contributed by Donghee Na in :issue:`39259`.)
588
589os
590--
591
592Added :const:`~os.CLD_KILLED` and :const:`~os.CLD_STOPPED` for :attr:`!si_code`.
593(Contributed by Donghee Na in :issue:`38493`.)
594
595Exposed the Linux-specific :func:`os.pidfd_open` (:issue:`38692`) and
596:const:`os.P_PIDFD` (:issue:`38713`) for process management with file
597descriptors.
598
599The :func:`os.unsetenv` function is now also available on Windows.
600(Contributed by Victor Stinner in :issue:`39413`.)
601
602The :func:`os.putenv` and :func:`os.unsetenv` functions are now always
603available.
604(Contributed by Victor Stinner in :issue:`39395`.)
605
606Added :func:`os.waitstatus_to_exitcode` function:
607convert a wait status to an exit code.
608(Contributed by Victor Stinner in :issue:`40094`.)
609
610pathlib
611-------
612
613Added :meth:`pathlib.Path.readlink` which acts similarly to
614:func:`os.readlink`.
615(Contributed by Girts Folkmanis in :issue:`30618`)
616
617pdb
618---
619
620On Windows now :class:`~pdb.Pdb` supports ``~/.pdbrc``.
621(Contributed by Tim Hopper and Dan Lidral-Porter in :issue:`20523`.)
622
623poplib
624------
625
626:class:`~poplib.POP3` and :class:`~poplib.POP3_SSL` now raise a :class:`ValueError`
627if the given timeout for their constructor is zero to prevent the creation of
628a non-blocking socket. (Contributed by Donghee Na in :issue:`39259`.)
629
630pprint
631------
632
633:mod:`pprint` can now pretty-print :class:`types.SimpleNamespace`.
634(Contributed by Carl Bordum Hansen in :issue:`37376`.)
635
636pydoc
637-----
638
639The documentation string is now shown not only for class, function,
640method etc, but for any object that has its own :attr:`~definition.__doc__`
641attribute.
642(Contributed by Serhiy Storchaka in :issue:`40257`.)
643
644random
645------
646
647Added a new :attr:`random.Random.randbytes` method: generate random bytes.
648(Contributed by Victor Stinner in :issue:`40286`.)
649
650signal
651------
652
653Exposed the Linux-specific :func:`signal.pidfd_send_signal` for sending to
654signals to a process using a file descriptor instead of a pid. (:issue:`38712`)
655
656smtplib
657-------
658
659:class:`~smtplib.SMTP` and :class:`~smtplib.SMTP_SSL` now raise a :class:`ValueError`
660if the given timeout for their constructor is zero to prevent the creation of
661a non-blocking socket. (Contributed by Donghee Na in :issue:`39259`.)
662
663:class:`~smtplib.LMTP` constructor  now has an optional *timeout* parameter.
664(Contributed by Donghee Na in :issue:`39329`.)
665
666socket
667------
668
669The :mod:`socket` module now exports the :const:`~socket.CAN_RAW_JOIN_FILTERS`
670constant on Linux 4.1 and greater.
671(Contributed by Stefan Tatschner and Zackery Spytz in :issue:`25780`.)
672
673The socket module now supports the :const:`~socket.CAN_J1939` protocol on
674platforms that support it.  (Contributed by Karl Ding in :issue:`40291`.)
675
676The socket module now has the :func:`socket.send_fds` and
677:func:`socket.recv_fds` functions. (Contributed by Joannah Nanjekye, Shinya
678Okano and Victor Stinner in :issue:`28724`.)
679
680
681time
682----
683
684On AIX, :func:`~time.thread_time` is now implemented with ``thread_cputime()``
685which has nanosecond resolution, rather than
686``clock_gettime(CLOCK_THREAD_CPUTIME_ID)`` which has a resolution of 10 milliseconds.
687(Contributed by Batuhan Taskaya in :issue:`40192`)
688
689sys
690---
691
692Added a new :data:`sys.platlibdir` attribute: name of the platform-specific
693library directory. It is used to build the path of standard library and the
694paths of installed extension modules. It is equal to ``"lib"`` on most
695platforms.  On Fedora and SuSE, it is equal to ``"lib64"`` on 64-bit platforms.
696(Contributed by Jan Matějek, Matěj Cepl, Charalampos Stratakis and Victor Stinner in :issue:`1294959`.)
697
698Previously, :data:`sys.stderr` was block-buffered when non-interactive. Now
699``stderr`` defaults to always being line-buffered.
700(Contributed by Jendrik Seipp in :issue:`13601`.)
701
702tracemalloc
703-----------
704
705Added :func:`tracemalloc.reset_peak` to set the peak size of traced memory
706blocks to the current size, to measure the peak of specific pieces of code.
707(Contributed by Huon Wilson in :issue:`40630`.)
708
709typing
710------
711
712:pep:`593` introduced an :data:`typing.Annotated` type to decorate existing
713types with context-specific metadata and new ``include_extras`` parameter to
714:func:`typing.get_type_hints` to access the metadata at runtime. (Contributed
715by Till Varoquaux and Konstantin Kashin.)
716
717unicodedata
718-----------
719
720The Unicode database has been updated to version 13.0.0. (:issue:`39926`).
721
722venv
723----
724
725The activation scripts provided by :mod:`venv` now all specify their prompt
726customization consistently by always using the value specified by
727``__VENV_PROMPT__``. Previously some scripts unconditionally used
728``__VENV_PROMPT__``, others only if it happened to be set (which was the default
729case), and one used ``__VENV_NAME__`` instead.
730(Contributed by Brett Cannon in :issue:`37663`.)
731
732xml
733---
734
735White space characters within attributes are now preserved when serializing
736:mod:`xml.etree.ElementTree` to XML file. EOLNs are no longer normalized
737to "\n". This is the result of discussion about how to interpret
738section 2.11 of XML spec.
739(Contributed by Mefistotelis in :issue:`39011`.)
740
741
742Optimizations
743=============
744
745* Optimized the idiom for assignment a temporary variable in comprehensions.
746  Now ``for y in [expr]`` in comprehensions is as fast as a simple assignment
747  ``y = expr``.  For example:
748
749     sums = [s for s in [0] for x in data for s in [s + x]]
750
751  Unlike the ``:=`` operator this idiom does not leak a variable to the
752  outer scope.
753
754  (Contributed by Serhiy Storchaka in :issue:`32856`.)
755
756* Optimized signal handling in multithreaded applications. If a thread different
757  than the main thread gets a signal, the bytecode evaluation loop is no longer
758  interrupted at each bytecode instruction to check for pending signals which
759  cannot be handled. Only the main thread of the main interpreter can handle
760  signals.
761
762  Previously, the bytecode evaluation loop was interrupted at each instruction
763  until the main thread handles signals.
764  (Contributed by Victor Stinner in :issue:`40010`.)
765
766* Optimized the :mod:`subprocess` module on FreeBSD using ``closefrom()``.
767  (Contributed by Ed Maste, Conrad Meyer, Kyle Evans, Kubilay Kocak and Victor
768  Stinner in :issue:`38061`.)
769
770* :c:func:`PyLong_FromDouble` is now up to 1.87x faster for values that
771  fit into :c:expr:`long`.
772  (Contributed by Sergey Fedoseev in :issue:`37986`.)
773
774* A number of Python builtins (:class:`range`, :class:`tuple`, :class:`set`,
775  :class:`frozenset`, :class:`list`, :class:`dict`) are now sped up by using
776  :pep:`590` vectorcall protocol.
777  (Contributed by Donghee Na, Mark Shannon, Jeroen Demeyer and Petr Viktorin in :issue:`37207`.)
778
779* Optimized :func:`~set.difference_update` for the case when the other set
780  is much larger than the base set.
781  (Suggested by Evgeny Kapun with code contributed by Michele Orrù in :issue:`8425`.)
782
783* Python's small object allocator (``obmalloc.c``) now allows (no more than)
784  one empty arena to remain available for immediate reuse, without returning
785  it to the OS.  This prevents thrashing in simple loops where an arena could
786  be created and destroyed anew on each iteration.
787  (Contributed by Tim Peters in :issue:`37257`.)
788
789* :term:`floor division` of float operation now has a better performance. Also
790  the message of :exc:`ZeroDivisionError` for this operation is updated.
791  (Contributed by Donghee Na in :issue:`39434`.)
792
793* Decoding short ASCII strings with UTF-8 and ascii codecs is now about
794  15% faster.  (Contributed by Inada Naoki in :issue:`37348`.)
795
796Here's a summary of performance improvements from Python 3.4 through Python 3.9:
797
798.. code-block:: none
799
800    Python version                       3.4     3.5     3.6     3.7     3.8    3.9
801    --------------                       ---     ---     ---     ---     ---    ---
802
803    Variable and attribute read access:
804        read_local                       7.1     7.1     5.4     5.1     3.9    3.9
805        read_nonlocal                    7.1     8.1     5.8     5.4     4.4    4.5
806        read_global                     15.5    19.0    14.3    13.6     7.6    7.8
807        read_builtin                    21.1    21.6    18.5    19.0     7.5    7.8
808        read_classvar_from_class        25.6    26.5    20.7    19.5    18.4   17.9
809        read_classvar_from_instance     22.8    23.5    18.8    17.1    16.4   16.9
810        read_instancevar                32.4    33.1    28.0    26.3    25.4   25.3
811        read_instancevar_slots          27.8    31.3    20.8    20.8    20.2   20.5
812        read_namedtuple                 73.8    57.5    45.0    46.8    18.4   18.7
813        read_boundmethod                37.6    37.9    29.6    26.9    27.7   41.1
814
815    Variable and attribute write access:
816        write_local                      8.7     9.3     5.5     5.3     4.3    4.3
817        write_nonlocal                  10.5    11.1     5.6     5.5     4.7    4.8
818        write_global                    19.7    21.2    18.0    18.0    15.8   16.7
819        write_classvar                  92.9    96.0   104.6   102.1    39.2   39.8
820        write_instancevar               44.6    45.8    40.0    38.9    35.5   37.4
821        write_instancevar_slots         35.6    36.1    27.3    26.6    25.7   25.8
822
823    Data structure read access:
824        read_list                       24.2    24.5    20.8    20.8    19.0   19.5
825        read_deque                      24.7    25.5    20.2    20.6    19.8   20.2
826        read_dict                       24.3    25.7    22.3    23.0    21.0   22.4
827        read_strdict                    22.6    24.3    19.5    21.2    18.9   21.5
828
829    Data structure write access:
830        write_list                      27.1    28.5    22.5    21.6    20.0   20.0
831        write_deque                     28.7    30.1    22.7    21.8    23.5   21.7
832        write_dict                      31.4    33.3    29.3    29.2    24.7   25.4
833        write_strdict                   28.4    29.9    27.5    25.2    23.1   24.5
834
835    Stack (or queue) operations:
836        list_append_pop                 93.4   112.7    75.4    74.2    50.8   50.6
837        deque_append_pop                43.5    57.0    49.4    49.2    42.5   44.2
838        deque_append_popleft            43.7    57.3    49.7    49.7    42.8   46.4
839
840    Timing loop:
841        loop_overhead                    0.5     0.6     0.4     0.3     0.3    0.3
842
843These results were generated from the variable access benchmark script at:
844``Tools/scripts/var_access_benchmark.py``. The benchmark script displays timings
845in nanoseconds.  The benchmarks were measured on an
846`Intel® Core™ i7-4960HQ processor
847<https://ark.intel.com/content/www/us/en/ark/products/76088/intel-core-i7-4960hq-processor-6m-cache-up-to-3-80-ghz.html>`_
848running the macOS 64-bit builds found at
849`python.org <https://www.python.org/downloads/macos/>`_.
850
851
852Deprecated
853==========
854
855* The distutils ``bdist_msi`` command is now deprecated, use
856  ``bdist_wheel`` (wheel packages) instead.
857  (Contributed by Hugo van Kemenade in :issue:`39586`.)
858
859* Currently :func:`math.factorial` accepts :class:`float` instances with
860  non-negative integer values (like ``5.0``).  It raises a :exc:`ValueError`
861  for non-integral and negative floats.  It is now deprecated.  In future
862  Python versions it will raise a :exc:`TypeError` for all floats.
863  (Contributed by Serhiy Storchaka in :issue:`37315`.)
864
865* The :mod:`!parser` and :mod:`!symbol` modules are deprecated and will be
866  removed in future versions of Python. For the majority of use cases,
867  users can leverage the Abstract Syntax Tree (AST) generation and compilation
868  stage, using the :mod:`ast` module.
869
870* The Public C API functions :c:func:`!PyParser_SimpleParseStringFlags`,
871  :c:func:`!PyParser_SimpleParseStringFlagsFilename`,
872  :c:func:`!PyParser_SimpleParseFileFlags` and :c:func:`!PyNode_Compile`
873  are deprecated and will be removed in Python 3.10 together with the old parser.
874
875* Using :data:`NotImplemented` in a boolean context has been deprecated,
876  as it is almost exclusively the result of incorrect rich comparator
877  implementations. It will be made a :exc:`TypeError` in a future version
878  of Python.
879  (Contributed by Josh Rosenberg in :issue:`35712`.)
880
881* The :mod:`random` module currently accepts any hashable type as a
882  possible seed value.  Unfortunately, some of those types are not
883  guaranteed to have a deterministic hash value.  After Python 3.9,
884  the module will restrict its seeds to :const:`None`, :class:`int`,
885  :class:`float`, :class:`str`, :class:`bytes`, and :class:`bytearray`.
886
887* Opening the :class:`~gzip.GzipFile` file for writing without specifying
888  the *mode* argument is deprecated.  In future Python versions it will always
889  be opened for reading by default.  Specify the *mode* argument for opening
890  it for writing and silencing a warning.
891  (Contributed by Serhiy Storchaka in :issue:`28286`.)
892
893* Deprecated the ``split()`` method of :class:`!_tkinter.TkappType` in
894  favour of the ``splitlist()`` method which has more consistent and
895  predictable behavior.
896  (Contributed by Serhiy Storchaka in :issue:`38371`.)
897
898* The explicit passing of coroutine objects to :func:`asyncio.wait` has been
899  deprecated and will be removed in version 3.11.
900  (Contributed by Yury Selivanov and Kyle Stanley in :issue:`34790`.)
901
902* binhex4 and hexbin4 standards are now deprecated. The :mod:`!binhex` module
903  and the following :mod:`binascii` functions are now deprecated:
904
905  * :func:`!b2a_hqx`, :func:`!a2b_hqx`
906  * :func:`!rlecode_hqx`, :func:`!rledecode_hqx`
907
908  (Contributed by Victor Stinner in :issue:`39353`.)
909
910* :mod:`ast` classes ``slice``, ``Index`` and ``ExtSlice`` are considered deprecated
911  and will be removed in future Python versions.  ``value`` itself should be
912  used instead of ``Index(value)``.  ``Tuple(slices, Load())`` should be
913  used instead of ``ExtSlice(slices)``.
914  (Contributed by Serhiy Storchaka in :issue:`34822`.)
915
916* :mod:`ast` classes ``Suite``, ``Param``, ``AugLoad`` and ``AugStore``
917  are considered deprecated and will be removed in future Python versions.
918  They were not generated by the parser and not accepted by the code
919  generator in Python 3.
920  (Contributed by Batuhan Taskaya in :issue:`39639` and :issue:`39969`
921  and Serhiy Storchaka in :issue:`39988`.)
922
923* The :c:func:`!PyEval_InitThreads` and :c:func:`!PyEval_ThreadsInitialized`
924  functions are now deprecated and will be removed in Python 3.11. Calling
925  :c:func:`!PyEval_InitThreads` now does nothing. The :term:`GIL` is initialized
926  by :c:func:`Py_Initialize` since Python 3.7.
927  (Contributed by Victor Stinner in :issue:`39877`.)
928
929* Passing ``None`` as the first argument to the :func:`shlex.split` function
930  has been deprecated.  (Contributed by Zackery Spytz in :issue:`33262`.)
931
932* :func:`!smtpd.MailmanProxy` is now deprecated as it is unusable without
933  an external module, ``mailman``.  (Contributed by Samuel Colvin in :issue:`35800`.)
934
935* The :mod:`!lib2to3` module now emits a :exc:`PendingDeprecationWarning`.
936  Python 3.9 switched to a PEG parser (see :pep:`617`), and Python 3.10 may
937  include new language syntax that is not parsable by lib2to3's LL(1) parser.
938  The :mod:`!lib2to3` module may be removed from the standard library in a future
939  Python version. Consider third-party alternatives such as `LibCST`_ or
940  `parso`_.
941  (Contributed by Carl Meyer in :issue:`40360`.)
942
943* The *random* parameter of :func:`random.shuffle` has been deprecated.
944  (Contributed by Raymond Hettinger in :issue:`40465`)
945
946.. _LibCST: https://libcst.readthedocs.io/
947.. _parso: https://parso.readthedocs.io/
948
949.. _removed-in-python-39:
950
951Removed
952=======
953
954* The erroneous version at :data:`!unittest.mock.__version__` has been removed.
955
956* :class:`!nntplib.NNTP`: ``xpath()`` and ``xgtitle()`` methods have been removed.
957  These methods are deprecated since Python 3.3. Generally, these extensions
958  are not supported or not enabled by NNTP server administrators.
959  For ``xgtitle()``, please use :meth:`!nntplib.NNTP.descriptions` or
960  :meth:`!nntplib.NNTP.description` instead.
961  (Contributed by Donghee Na in :issue:`39366`.)
962
963* :class:`array.array`: ``tostring()`` and ``fromstring()`` methods have been
964  removed. They were aliases to ``tobytes()`` and ``frombytes()``, deprecated
965  since Python 3.2.
966  (Contributed by Victor Stinner in :issue:`38916`.)
967
968* The undocumented ``sys.callstats()`` function has been removed. Since Python
969  3.7, it was deprecated and always returned :const:`None`. It required a special
970  build option ``CALL_PROFILE`` which was already removed in Python 3.7.
971  (Contributed by Victor Stinner in :issue:`37414`.)
972
973* The ``sys.getcheckinterval()`` and ``sys.setcheckinterval()`` functions have
974  been removed. They were deprecated since Python 3.2. Use
975  :func:`sys.getswitchinterval` and :func:`sys.setswitchinterval` instead.
976  (Contributed by Victor Stinner in :issue:`37392`.)
977
978* The C function ``PyImport_Cleanup()`` has been removed. It was documented as:
979  "Empty the module table.  For internal use only."
980  (Contributed by Victor Stinner in :issue:`36710`.)
981
982* ``_dummy_thread`` and ``dummy_threading`` modules have been removed. These
983  modules were deprecated since Python 3.7 which requires threading support.
984  (Contributed by Victor Stinner in :issue:`37312`.)
985
986* ``aifc.openfp()`` alias to ``aifc.open()``, ``sunau.openfp()`` alias to
987  ``sunau.open()``, and ``wave.openfp()`` alias to :func:`wave.open` have been
988  removed. They were deprecated since Python 3.7.
989  (Contributed by Victor Stinner in :issue:`37320`.)
990
991* The :meth:`!isAlive` method of :class:`threading.Thread`
992  has been removed. It was deprecated since Python 3.8.
993  Use :meth:`~threading.Thread.is_alive` instead.
994  (Contributed by Donghee Na in :issue:`37804`.)
995
996* Methods ``getchildren()`` and ``getiterator()`` of classes
997  :class:`~xml.etree.ElementTree.ElementTree` and
998  :class:`~xml.etree.ElementTree.Element` in the :mod:`~xml.etree.ElementTree`
999  module have been removed.  They were deprecated in Python 3.2.
1000  Use ``iter(x)`` or ``list(x)`` instead of ``x.getchildren()`` and
1001  ``x.iter()`` or ``list(x.iter())`` instead of ``x.getiterator()``.
1002  (Contributed by Serhiy Storchaka in :issue:`36543`.)
1003
1004* The old :mod:`plistlib` API has been removed, it was deprecated since Python
1005  3.4. Use the :func:`~plistlib.load`, :func:`~plistlib.loads`, :func:`~plistlib.dump`, and
1006  :func:`~plistlib.dumps` functions. Additionally, the *use_builtin_types* parameter was
1007  removed, standard :class:`bytes` objects are always used instead.
1008  (Contributed by Jon Janzen in :issue:`36409`.)
1009
1010* The C function ``PyGen_NeedsFinalizing`` has been removed. It was not
1011  documented, tested, or used anywhere within CPython after the implementation
1012  of :pep:`442`. Patch by Joannah Nanjekye.
1013  (Contributed by Joannah Nanjekye in :issue:`15088`)
1014
1015* ``base64.encodestring()`` and ``base64.decodestring()``, aliases deprecated
1016  since Python 3.1, have been removed: use :func:`base64.encodebytes` and
1017  :func:`base64.decodebytes` instead.
1018  (Contributed by Victor Stinner in :issue:`39351`.)
1019
1020* ``fractions.gcd()`` function has been removed, it was deprecated since Python
1021  3.5 (:issue:`22486`): use :func:`math.gcd` instead.
1022  (Contributed by Victor Stinner in :issue:`39350`.)
1023
1024* The *buffering* parameter of :class:`bz2.BZ2File` has been removed. Since
1025  Python 3.0, it was ignored and using it emitted a :exc:`DeprecationWarning`.
1026  Pass an open file object to control how the file is opened.
1027  (Contributed by Victor Stinner in :issue:`39357`.)
1028
1029* The *encoding* parameter of :func:`json.loads` has been removed.
1030  As of Python 3.1, it was deprecated and ignored; using it has emitted a
1031  :exc:`DeprecationWarning` since Python 3.8.
1032  (Contributed by Inada Naoki in :issue:`39377`)
1033
1034* ``with (await asyncio.lock):`` and ``with (yield from asyncio.lock):`` statements are
1035  not longer supported, use ``async with lock`` instead.  The same is correct for
1036  ``asyncio.Condition`` and ``asyncio.Semaphore``.
1037  (Contributed by Andrew Svetlov in :issue:`34793`.)
1038
1039* The :func:`!sys.getcounts` function, the ``-X showalloccount`` command line
1040  option and the ``show_alloc_count`` field of the C structure
1041  :c:type:`PyConfig` have been removed. They required a special Python build by
1042  defining ``COUNT_ALLOCS`` macro.
1043  (Contributed by Victor Stinner in :issue:`39489`.)
1044
1045* The ``_field_types`` attribute of the :class:`typing.NamedTuple` class
1046  has been removed.  It was deprecated since Python 3.8.  Use
1047  the ``__annotations__`` attribute instead.
1048  (Contributed by Serhiy Storchaka in :issue:`40182`.)
1049
1050* The :meth:`!symtable.SymbolTable.has_exec` method has been removed. It was
1051  deprecated since 2006, and only returning ``False`` when it's called.
1052  (Contributed by Batuhan Taskaya in :issue:`40208`)
1053
1054* The :meth:`!asyncio.Task.current_task` and :meth:`!asyncio.Task.all_tasks`
1055  have been removed. They were deprecated since Python 3.7 and you can use
1056  :func:`asyncio.current_task` and :func:`asyncio.all_tasks` instead.
1057  (Contributed by Rémi Lapeyre in :issue:`40967`)
1058
1059* The ``unescape()`` method in the :class:`html.parser.HTMLParser` class
1060  has been removed (it was deprecated since Python 3.4).  :func:`html.unescape`
1061  should be used for converting character references to the corresponding
1062  unicode characters.
1063
1064
1065Porting to Python 3.9
1066=====================
1067
1068This section lists previously described changes and other bugfixes
1069that may require changes to your code.
1070
1071
1072Changes in the Python API
1073-------------------------
1074
1075* :func:`__import__` and :func:`importlib.util.resolve_name` now raise
1076  :exc:`ImportError` where it previously raised :exc:`ValueError`. Callers
1077  catching the specific exception type and supporting both Python 3.9 and
1078  earlier versions will need to catch both using ``except (ImportError, ValueError):``.
1079
1080* The :mod:`venv` activation scripts no longer special-case when
1081  ``__VENV_PROMPT__`` is set to ``""``.
1082
1083* The :meth:`select.epoll.unregister` method no longer ignores the
1084  :const:`~errno.EBADF` error.
1085  (Contributed by Victor Stinner in :issue:`39239`.)
1086
1087* The *compresslevel* parameter of :class:`bz2.BZ2File` became keyword-only,
1088  since the *buffering* parameter has been removed.
1089  (Contributed by Victor Stinner in :issue:`39357`.)
1090
1091* Simplified AST for subscription. Simple indices will be represented by
1092  their value, extended slices will be represented as tuples.
1093  ``Index(value)`` will return a ``value`` itself, ``ExtSlice(slices)``
1094  will return ``Tuple(slices, Load())``.
1095  (Contributed by Serhiy Storchaka in :issue:`34822`.)
1096
1097* The :mod:`importlib` module now ignores the :envvar:`PYTHONCASEOK`
1098  environment variable when the :option:`-E` or :option:`-I` command line
1099  options are being used.
1100
1101* The *encoding* parameter has been added to the classes :class:`ftplib.FTP` and
1102  :class:`ftplib.FTP_TLS` as a keyword-only parameter, and the default encoding
1103  is changed from Latin-1 to UTF-8 to follow :rfc:`2640`.
1104
1105* :meth:`asyncio.loop.shutdown_default_executor` has been added to
1106  :class:`~asyncio.AbstractEventLoop`, meaning alternative event loops that
1107  inherit from it should have this method defined.
1108  (Contributed by Kyle Stanley in :issue:`34037`.)
1109
1110* The constant values of future flags in the :mod:`__future__` module
1111  is updated in order to prevent collision with compiler flags. Previously
1112  ``PyCF_ALLOW_TOP_LEVEL_AWAIT`` was clashing with ``CO_FUTURE_DIVISION``.
1113  (Contributed by Batuhan Taskaya in :issue:`39562`)
1114
1115* ``array('u')`` now uses :c:type:`wchar_t` as C type instead of ``Py_UNICODE``.
1116  This change doesn't affect to its behavior because ``Py_UNICODE`` is alias
1117  of :c:type:`wchar_t` since Python 3.3.
1118  (Contributed by Inada Naoki in :issue:`34538`.)
1119
1120* The :func:`logging.getLogger` API now returns the root logger when passed
1121  the name ``'root'``, whereas previously it returned a non-root logger named
1122  ``'root'``. This could affect cases where user code explicitly wants a
1123  non-root logger named ``'root'``, or instantiates a logger using
1124  ``logging.getLogger(__name__)`` in some top-level module called ``'root.py'``.
1125  (Contributed by Vinay Sajip in :issue:`37742`.)
1126
1127* Division handling of :class:`~pathlib.PurePath` now returns :data:`NotImplemented`
1128  instead of raising a :exc:`TypeError` when passed something other than an
1129  instance of ``str`` or :class:`~pathlib.PurePath`.  This allows creating
1130  compatible classes that don't inherit from those mentioned types.
1131  (Contributed by Roger Aiudi in :issue:`34775`).
1132
1133* Starting with Python 3.9.5 the :mod:`ipaddress` module no longer
1134  accepts any leading zeros in IPv4 address strings. Leading zeros are
1135  ambiguous and interpreted as octal notation by some libraries. For example
1136  the legacy function :func:`socket.inet_aton` treats leading zeros as octal
1137  notatation. glibc implementation of modern :func:`~socket.inet_pton` does
1138  not accept any leading zeros.
1139  (Contributed by Christian Heimes in :issue:`36384`).
1140
1141* :func:`codecs.lookup` now normalizes the encoding name the same way as
1142  :func:`encodings.normalize_encoding`, except that :func:`codecs.lookup` also
1143  converts the name to lower case. For example, ``"latex+latin1"`` encoding
1144  name is now normalized to ``"latex_latin1"``.
1145  (Contributed by Jordon Xu in :issue:`37751`.)
1146
1147
1148Changes in the C API
1149--------------------
1150
1151* Instances of :ref:`heap-allocated types <heap-types>` (such as those created with
1152  :c:func:`PyType_FromSpec` and similar APIs) hold a reference to their type
1153  object since Python 3.8. As indicated in the "Changes in the C API" of Python
1154  3.8, for the vast majority of cases, there should be no side effect but for
1155  types that have a custom :c:member:`~PyTypeObject.tp_traverse` function,
1156  ensure that all custom ``tp_traverse`` functions of heap-allocated types
1157  visit the object's type.
1158
1159    Example:
1160
1161    .. code-block:: c
1162
1163        int
1164        foo_traverse(foo_struct *self, visitproc visit, void *arg) {
1165        // Rest of the traverse function
1166        #if PY_VERSION_HEX >= 0x03090000
1167            // This was not needed before Python 3.9 (Python issue 35810 and 40217)
1168            Py_VISIT(Py_TYPE(self));
1169        #endif
1170        }
1171
1172  If your traverse function delegates to ``tp_traverse`` of its base class
1173  (or another type), ensure that ``Py_TYPE(self)`` is visited only once.
1174  Note that only :ref:`heap type <heap-types>` are expected to visit the type
1175  in ``tp_traverse``.
1176
1177    For example, if your ``tp_traverse`` function includes:
1178
1179    .. code-block:: c
1180
1181        base->tp_traverse(self, visit, arg)
1182
1183    then add:
1184
1185    .. code-block:: c
1186
1187        #if PY_VERSION_HEX >= 0x03090000
1188            // This was not needed before Python 3.9 (bpo-35810 and bpo-40217)
1189            if (base->tp_flags & Py_TPFLAGS_HEAPTYPE) {
1190                // a heap type's tp_traverse already visited Py_TYPE(self)
1191            } else {
1192                Py_VISIT(Py_TYPE(self));
1193            }
1194        #else
1195
1196  (See :issue:`35810` and :issue:`40217` for more information.)
1197
1198* The functions ``PyEval_CallObject``, ``PyEval_CallFunction``,
1199  ``PyEval_CallMethod`` and ``PyEval_CallObjectWithKeywords`` are deprecated.
1200  Use :c:func:`PyObject_Call` and its variants instead.
1201  (See more details in :issue:`29548`.)
1202
1203CPython bytecode changes
1204------------------------
1205
1206* The :opcode:`LOAD_ASSERTION_ERROR` opcode was added for handling the
1207  :keyword:`assert` statement. Previously, the assert statement would not work
1208  correctly if the :exc:`AssertionError` exception was being shadowed.
1209  (Contributed by Zackery Spytz in :issue:`34880`.)
1210
1211* The :opcode:`COMPARE_OP` opcode was split into four distinct instructions:
1212
1213  * ``COMPARE_OP`` for rich comparisons
1214  * ``IS_OP`` for 'is' and 'is not' tests
1215  * ``CONTAINS_OP`` for 'in' and 'not in' tests
1216  * ``JUMP_IF_NOT_EXC_MATCH`` for checking exceptions in 'try-except'
1217    statements.
1218
1219  (Contributed by Mark Shannon in :issue:`39156`.)
1220
1221
1222Build Changes
1223=============
1224
1225* Added ``--with-platlibdir`` option to the ``configure`` script: name of the
1226  platform-specific library directory, stored in the new :data:`sys.platlibdir`
1227  attribute. See :data:`sys.platlibdir` attribute for more information.
1228  (Contributed by Jan Matějek, Matěj Cepl, Charalampos Stratakis
1229  and Victor Stinner in :issue:`1294959`.)
1230
1231* The ``COUNT_ALLOCS`` special build macro has been removed.
1232  (Contributed by Victor Stinner in :issue:`39489`.)
1233
1234* On non-Windows platforms, the :c:func:`!setenv` and :c:func:`!unsetenv`
1235  functions are now required to build Python.
1236  (Contributed by Victor Stinner in :issue:`39395`.)
1237
1238* On non-Windows platforms, creating ``bdist_wininst`` installers is now
1239  officially unsupported.  (See :issue:`10945` for more details.)
1240
1241* When building Python on macOS from source, ``_tkinter`` now links with
1242  non-system Tcl and Tk frameworks if they are installed in
1243  ``/Library/Frameworks``, as had been the case on older releases
1244  of macOS. If a macOS SDK is explicitly configured, by using
1245  :option:`--enable-universalsdk` or ``-isysroot``, only the SDK itself is
1246  searched. The default behavior can still be overridden with
1247  ``--with-tcltk-includes`` and ``--with-tcltk-libs``.
1248  (Contributed by Ned Deily in :issue:`34956`.)
1249
1250* Python can now be built for Windows 10 ARM64.
1251  (Contributed by Steve Dower in :issue:`33125`.)
1252
1253* Some individual tests are now skipped when ``--pgo`` is used.  The tests
1254  in question increased the PGO task time significantly and likely
1255  didn't help improve optimization of the final executable. This
1256  speeds up the task by a factor of about 15x.  Running the full unit test
1257  suite is slow.  This change may result in a slightly less optimized build
1258  since not as many code branches will be executed.  If you are willing to
1259  wait for the much slower build, the old behavior can be restored using
1260  ``./configure [..] PROFILE_TASK="-m test --pgo-extended"``.  We make no
1261  guarantees as to which PGO task set produces a faster build.  Users who care
1262  should run their own relevant benchmarks as results can depend on the
1263  environment, workload, and compiler tool chain.
1264  (See :issue:`36044` and :issue:`37707` for more details.)
1265
1266
1267C API Changes
1268=============
1269
1270New Features
1271------------
1272
1273* :pep:`573`: Added :c:func:`PyType_FromModuleAndSpec` to associate
1274  a module with a class; :c:func:`PyType_GetModule` and
1275  :c:func:`PyType_GetModuleState` to retrieve the module and its state; and
1276  :c:type:`PyCMethod` and :c:macro:`METH_METHOD` to allow a method to
1277  access the class it was defined in.
1278  (Contributed by Marcel Plch and Petr Viktorin in :issue:`38787`.)
1279
1280* Added :c:func:`PyFrame_GetCode` function: get a frame code.
1281  Added :c:func:`PyFrame_GetBack` function: get the frame next outer frame.
1282  (Contributed by Victor Stinner in :issue:`40421`.)
1283
1284* Added :c:func:`PyFrame_GetLineNumber` to the limited C API.
1285  (Contributed by Victor Stinner in :issue:`40421`.)
1286
1287* Added :c:func:`PyThreadState_GetInterpreter` and
1288  :c:func:`PyInterpreterState_Get` functions to get the interpreter.
1289  Added :c:func:`PyThreadState_GetFrame` function to get the current frame of a
1290  Python thread state.
1291  Added :c:func:`PyThreadState_GetID` function: get the unique identifier of a
1292  Python thread state.
1293  (Contributed by Victor Stinner in :issue:`39947`.)
1294
1295* Added a new public :c:func:`PyObject_CallNoArgs` function to the C API, which
1296  calls a callable Python object without any arguments. It is the most efficient
1297  way to call a callable Python object without any argument.
1298  (Contributed by Victor Stinner in :issue:`37194`.)
1299
1300* Changes in the limited C API (if ``Py_LIMITED_API`` macro is defined):
1301
1302  * Provide :c:func:`Py_EnterRecursiveCall` and :c:func:`Py_LeaveRecursiveCall`
1303    as regular functions for the limited API. Previously, there were defined as
1304    macros, but these macros didn't compile with the limited C API which cannot
1305    access ``PyThreadState.recursion_depth`` field (the structure is opaque in
1306    the limited C API).
1307
1308  * ``PyObject_INIT()`` and ``PyObject_INIT_VAR()`` become regular "opaque"
1309    function to hide implementation details.
1310
1311  (Contributed by Victor Stinner in :issue:`38644` and :issue:`39542`.)
1312
1313* The :c:func:`PyModule_AddType` function is added to help adding a type
1314  to a module.
1315  (Contributed by Donghee Na in :issue:`40024`.)
1316
1317* Added the functions :c:func:`PyObject_GC_IsTracked` and
1318  :c:func:`PyObject_GC_IsFinalized` to the public API to allow to query if
1319  Python objects are being currently tracked or have been already finalized by
1320  the garbage collector respectively.
1321  (Contributed by Pablo Galindo Salgado in :issue:`40241`.)
1322
1323* Added :c:func:`!_PyObject_FunctionStr` to get a user-friendly string
1324  representation of a function-like object.
1325  (Patch by Jeroen Demeyer in :issue:`37645`.)
1326
1327* Added :c:func:`PyObject_CallOneArg` for calling an object with one
1328  positional argument
1329  (Patch by Jeroen Demeyer in :issue:`37483`.)
1330
1331
1332Porting to Python 3.9
1333---------------------
1334
1335* ``PyInterpreterState.eval_frame`` (:pep:`523`) now requires a new mandatory
1336  *tstate* parameter (``PyThreadState*``).
1337  (Contributed by Victor Stinner in :issue:`38500`.)
1338
1339* Extension modules: :c:member:`~PyModuleDef.m_traverse`,
1340  :c:member:`~PyModuleDef.m_clear` and :c:member:`~PyModuleDef.m_free`
1341  functions of :c:type:`PyModuleDef` are no longer called if the module state
1342  was requested but is not allocated yet. This is the case immediately after
1343  the module is created and before the module is executed
1344  (:c:data:`Py_mod_exec` function). More precisely, these functions are not called
1345  if :c:member:`~PyModuleDef.m_size` is greater than 0 and the module state (as
1346  returned by :c:func:`PyModule_GetState`) is ``NULL``.
1347
1348  Extension modules without module state (``m_size <= 0``) are not affected.
1349
1350* If :c:func:`Py_AddPendingCall` is called in a subinterpreter, the function is
1351  now scheduled to be called from the subinterpreter, rather than being called
1352  from the main interpreter. Each subinterpreter now has its own list of
1353  scheduled calls.
1354  (Contributed by Victor Stinner in :issue:`39984`.)
1355
1356* The Windows registry is no longer used to initialize :data:`sys.path` when
1357  the ``-E`` option is used (if :c:member:`PyConfig.use_environment` is set to
1358  ``0``). This is significant when embedding Python on Windows.
1359  (Contributed by Zackery Spytz in :issue:`8901`.)
1360
1361* The global variable :c:data:`PyStructSequence_UnnamedField` is now a constant
1362  and refers to a constant string.
1363  (Contributed by Serhiy Storchaka in :issue:`38650`.)
1364
1365* The :c:type:`!PyGC_Head` structure is now opaque. It is only defined in the
1366  internal C API (``pycore_gc.h``).
1367  (Contributed by Victor Stinner in :issue:`40241`.)
1368
1369* The ``Py_UNICODE_COPY``, ``Py_UNICODE_FILL``, ``PyUnicode_WSTR_LENGTH``,
1370  :c:func:`!PyUnicode_FromUnicode`, :c:func:`!PyUnicode_AsUnicode`,
1371  ``_PyUnicode_AsUnicode``, and :c:func:`!PyUnicode_AsUnicodeAndSize` are
1372  marked as deprecated in C.  They have been deprecated by :pep:`393` since
1373  Python 3.3.
1374  (Contributed by Inada Naoki in :issue:`36346`.)
1375
1376* The :c:func:`Py_FatalError` function is replaced with a macro which logs
1377  automatically the name of the current function, unless the
1378  ``Py_LIMITED_API`` macro is defined.
1379  (Contributed by Victor Stinner in :issue:`39882`.)
1380
1381* The vectorcall protocol now requires that the caller passes only strings as
1382  keyword names. (See :issue:`37540` for more information.)
1383
1384* Implementation details of a number of macros and functions are now hidden:
1385
1386  * :c:func:`PyObject_IS_GC` macro was converted to a function.
1387
1388  * The :c:func:`!PyObject_NEW` macro becomes an alias to the
1389    :c:macro:`PyObject_New` macro, and the :c:func:`!PyObject_NEW_VAR` macro
1390    becomes an alias to the :c:macro:`PyObject_NewVar` macro. They no longer
1391    access directly the :c:member:`PyTypeObject.tp_basicsize` member.
1392
1393  * :c:func:`!PyObject_GET_WEAKREFS_LISTPTR` macro was converted to a function:
1394    the macro accessed directly the :c:member:`PyTypeObject.tp_weaklistoffset`
1395    member.
1396
1397  * :c:func:`PyObject_CheckBuffer` macro was converted to a function: the macro
1398    accessed directly the :c:member:`PyTypeObject.tp_as_buffer` member.
1399
1400  * :c:func:`PyIndex_Check` is now always declared as an opaque function to hide
1401    implementation details: removed the ``PyIndex_Check()`` macro. The macro accessed
1402    directly the :c:member:`PyTypeObject.tp_as_number` member.
1403
1404  (See :issue:`40170` for more details.)
1405
1406Removed
1407-------
1408
1409* Excluded ``PyFPE_START_PROTECT()`` and ``PyFPE_END_PROTECT()`` macros of
1410  ``pyfpe.h`` from the limited C API.
1411  (Contributed by Victor Stinner in :issue:`38835`.)
1412
1413* The ``tp_print`` slot of :ref:`PyTypeObject <type-structs>` has been removed.
1414  It was used for printing objects to files in Python 2.7 and before. Since
1415  Python 3.0, it has been ignored and unused.
1416  (Contributed by Jeroen Demeyer in :issue:`36974`.)
1417
1418* Changes in the limited C API (if ``Py_LIMITED_API`` macro is defined):
1419
1420  * Excluded the following functions from the limited C API:
1421
1422    * ``PyThreadState_DeleteCurrent()``
1423      (Contributed by Joannah Nanjekye in :issue:`37878`.)
1424    * ``_Py_CheckRecursionLimit``
1425    * ``_Py_NewReference()``
1426    * ``_Py_ForgetReference()``
1427    * ``_PyTraceMalloc_NewReference()``
1428    * ``_Py_GetRefTotal()``
1429    * The trashcan mechanism which never worked in the limited C API.
1430    * ``PyTrash_UNWIND_LEVEL``
1431    * ``Py_TRASHCAN_BEGIN_CONDITION``
1432    * ``Py_TRASHCAN_BEGIN``
1433    * ``Py_TRASHCAN_END``
1434    * ``Py_TRASHCAN_SAFE_BEGIN``
1435    * ``Py_TRASHCAN_SAFE_END``
1436
1437  * Moved following functions and definitions to the internal C API:
1438
1439    * ``_PyDebug_PrintTotalRefs()``
1440    * ``_Py_PrintReferences()``
1441    * ``_Py_PrintReferenceAddresses()``
1442    * ``_Py_tracemalloc_config``
1443    * ``_Py_AddToAllObjects()`` (specific to ``Py_TRACE_REFS`` build)
1444
1445  (Contributed by Victor Stinner in :issue:`38644` and :issue:`39542`.)
1446
1447* Removed ``_PyRuntime.getframe`` hook and removed ``_PyThreadState_GetFrame``
1448  macro which was an alias to ``_PyRuntime.getframe``. They were only exposed
1449  by the internal C API. Removed also ``PyThreadFrameGetter`` type.
1450  (Contributed by Victor Stinner in :issue:`39946`.)
1451
1452* Removed the following functions from the C API. Call :c:func:`PyGC_Collect`
1453  explicitly to clear all free lists.
1454  (Contributed by Inada Naoki and Victor Stinner in :issue:`37340`,
1455  :issue:`38896` and :issue:`40428`.)
1456
1457  * ``PyAsyncGen_ClearFreeLists()``
1458  * ``PyContext_ClearFreeList()``
1459  * ``PyDict_ClearFreeList()``
1460  * ``PyFloat_ClearFreeList()``
1461  * ``PyFrame_ClearFreeList()``
1462  * ``PyList_ClearFreeList()``
1463  * ``PyMethod_ClearFreeList()`` and ``PyCFunction_ClearFreeList()``:
1464    the free lists of bound method objects have been removed.
1465  * ``PySet_ClearFreeList()``: the set free list has been removed
1466    in Python 3.4.
1467  * ``PyTuple_ClearFreeList()``
1468  * ``PyUnicode_ClearFreeList()``: the Unicode free list has been removed in
1469    Python 3.3.
1470
1471* Removed ``_PyUnicode_ClearStaticStrings()`` function.
1472  (Contributed by Victor Stinner in :issue:`39465`.)
1473
1474* Removed ``Py_UNICODE_MATCH``. It has been deprecated by :pep:`393`, and
1475  broken since Python 3.3. The :c:func:`PyUnicode_Tailmatch` function can be
1476  used instead.
1477  (Contributed by Inada Naoki in :issue:`36346`.)
1478
1479* Cleaned header files of interfaces defined but with no implementation.
1480  The public API symbols being removed are:
1481  ``_PyBytes_InsertThousandsGroupingLocale``,
1482  ``_PyBytes_InsertThousandsGrouping``, ``_Py_InitializeFromArgs``,
1483  ``_Py_InitializeFromWideArgs``, ``_PyFloat_Repr``, ``_PyFloat_Digits``,
1484  ``_PyFloat_DigitsInit``, ``PyFrame_ExtendStack``, ``_PyAIterWrapper_Type``,
1485  ``PyNullImporter_Type``, ``PyCmpWrapper_Type``, ``PySortWrapper_Type``,
1486  ``PyNoArgsFunction``.
1487  (Contributed by Pablo Galindo Salgado in :issue:`39372`.)
1488
1489Notable changes in Python 3.9.1
1490===============================
1491
1492typing
1493------
1494
1495The behavior of :class:`typing.Literal` was changed to conform with :pep:`586`
1496and to match the behavior of static type checkers specified in the PEP.
1497
14981. ``Literal`` now de-duplicates parameters.
14992. Equality comparisons between ``Literal`` objects are now order independent.
15003. ``Literal`` comparisons now respect types.  For example,
1501   ``Literal[0] == Literal[False]`` previously evaluated to ``True``.  It is
1502   now ``False``.  To support this change, the internally used type cache now
1503   supports differentiating types.
15044. ``Literal`` objects will now raise a :exc:`TypeError` exception during
1505   equality comparisons if any of their parameters are not :term:`hashable`.
1506   Note that declaring ``Literal`` with mutable parameters will not throw
1507   an error::
1508
1509      >>> from typing import Literal
1510      >>> Literal[{0}]
1511      >>> Literal[{0}] == Literal[{False}]
1512      Traceback (most recent call last):
1513        File "<stdin>", line 1, in <module>
1514      TypeError: unhashable type: 'set'
1515
1516(Contributed by Yurii Karabas in :issue:`42345`.)
1517
1518macOS 11.0 (Big Sur) and Apple Silicon Mac support
1519--------------------------------------------------
1520
1521As of 3.9.1, Python now fully supports building and running on macOS 11.0
1522(Big Sur) and on Apple Silicon Macs (based on the ``ARM64`` architecture).
1523A new universal build variant, ``universal2``, is now available to natively
1524support both ``ARM64`` and ``Intel 64`` in one set of executables. Binaries
1525can also now be built on current versions of macOS to be deployed on a range
1526of older macOS versions (tested to 10.9) while making some newer OS
1527functions and options conditionally available based on the operating system
1528version in use at runtime ("weaklinking").
1529
1530(Contributed by Ronald Oussoren and Lawrence D'Anna in :issue:`41100`.)
1531
1532Notable changes in Python 3.9.2
1533===============================
1534
1535collections.abc
1536---------------
1537
1538:class:`collections.abc.Callable` generic now flattens type parameters, similar
1539to what :data:`typing.Callable` currently does.  This means that
1540``collections.abc.Callable[[int, str], str]`` will have ``__args__`` of
1541``(int, str, str)``; previously this was ``([int, str], str)``.  To allow this
1542change, :class:`types.GenericAlias` can now be subclassed, and a subclass will
1543be returned when subscripting the :class:`collections.abc.Callable` type.
1544Code which accesses the arguments via :func:`typing.get_args` or ``__args__``
1545need to account for this change.  A :exc:`DeprecationWarning` may be emitted for
1546invalid forms of parameterizing :class:`collections.abc.Callable` which may have
1547passed silently in Python 3.9.1.  This :exc:`DeprecationWarning` will
1548become a :exc:`TypeError` in Python 3.10.
1549(Contributed by Ken Jin in :issue:`42195`.)
1550
1551urllib.parse
1552------------
1553
1554Earlier Python versions allowed using both ``;`` and ``&`` as
1555query parameter separators in :func:`urllib.parse.parse_qs` and
1556:func:`urllib.parse.parse_qsl`.  Due to security concerns, and to conform with
1557newer W3C recommendations, this has been changed to allow only a single
1558separator key, with ``&`` as the default.  This change also affects
1559:func:`!cgi.parse` and :func:`!cgi.parse_multipart` as they use the affected
1560functions internally. For more details, please see their respective
1561documentation.
1562(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.)
1563
1564Notable changes in Python 3.9.3
1565===============================
1566
1567A security fix alters the :class:`ftplib.FTP` behavior to not trust the
1568IPv4 address sent from the remote server when setting up a passive data
1569channel.  We reuse the ftp server IP address instead.  For unusual code
1570requiring the old behavior, set a ``trust_server_pasv_ipv4_address``
1571attribute on your FTP instance to ``True``.  (See :gh:`87451`)
1572
1573Notable changes in Python 3.9.5
1574===============================
1575
1576urllib.parse
1577------------
1578
1579The presence of newline or tab characters in parts of a URL allows for some
1580forms of attacks. Following the WHATWG specification that updates :rfc:`3986`,
1581ASCII newline ``\n``, ``\r`` and tab ``\t`` characters are stripped from the
1582URL by the parser in :mod:`urllib.parse` preventing such attacks. The removal
1583characters are controlled by a new module level variable
1584``urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE``. (See :gh:`88048`)
1585
1586Notable security feature in 3.9.14
1587==================================
1588
1589Converting between :class:`int` and :class:`str` in bases other than 2
1590(binary), 4, 8 (octal), 16 (hexadecimal), or 32 such as base 10 (decimal)
1591now raises a :exc:`ValueError` if the number of digits in string form is
1592above a limit to avoid potential denial of service attacks due to the
1593algorithmic complexity. This is a mitigation for :cve:`2020-10735`.
1594This limit can be configured or disabled by environment variable, command
1595line flag, or :mod:`sys` APIs. See the :ref:`integer string conversion
1596length limitation <int_max_str_digits>` documentation.  The default limit
1597is 4300 digits in string form.
1598
1599Notable changes in 3.9.17
1600=========================
1601
1602tarfile
1603-------
1604
1605* The extraction methods in :mod:`tarfile`, and :func:`shutil.unpack_archive`,
1606  have a new a *filter* argument that allows limiting tar features than may be
1607  surprising or dangerous, such as creating files outside the destination
1608  directory.
1609  See :ref:`tarfile-extraction-filter` for details.
1610  In Python 3.12, use without the *filter* argument will show a
1611  :exc:`DeprecationWarning`.
1612  In Python 3.14, the default will switch to ``'data'``.
1613  (Contributed by Petr Viktorin in :pep:`706`.)
1614