3.14.md
1> **Источник:** https://python-all.ru/3.16/whatsnew/3.14.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Что нового в Python 3.1489**Редакторы:**1011Adam Turner and Hugo van Kemenade1213В этой статье описываются новые возможности Python 3.14 по сравнению с 3.13. Python 3.14 был выпущен 7 октября 2025 года. За подробностями обращайтесь к [журналу изменений](https://python-all.ru/3.16/whatsnew/changelog.html#changelog).1415> **См. также**16>17> [**PEP 745**](https://python-all.ru/3.16/whatsnew/3.14.html) – График выпуска Python 3.141819## Итоги – основные изменения2021Python 3.14 – последний стабильный выпуск языка Python, включающий разнообразные изменения в языке, реализации и стандартной библиотеке. Самые значительные изменения включают [строковые шаблоны](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-template-string-literals), [отложенное вычисление аннотаций](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-deferred-annotations) и поддержку [субинтерпретаторов](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-multiple-interpreters) в стандартной библиотеке.2223Изменения в библиотеке включают значительно улучшенные возможности [интроспекции в asyncio](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-asyncio-introspection), [поддержку Zstandard](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-zstandard) через новый модуль [`compression.zstd`](https://python-all.ru/3.16/library/compression.zstd.html#module-compression.zstd), подсветку синтаксиса в REPL, а также обычные устаревания и удаления, и улучшения удобства использования и корректности.2425Эта статья не ставит целью полное описание всех новых возможностей, а даёт удобный обзор. За полной информацией обращайтесь к документации, например, к [Справочнику по библиотеке](https://python-all.ru/3.16/library/index.html#library-index) и [Справочнику по языку](https://python-all.ru/3.16/reference/index.html#reference-index). Чтобы понять полную реализацию и обоснование дизайна изменения, обратитесь к PEP соответствующей новой возможности; но учтите, что PEP обычно не обновляются после полной реализации возможности. Руководство по переходу с более ранних версий Python см. в разделе [Перенос на Python 3.14](https://python-all.ru/3.16/whatsnew/3.14.html#porting-to-python-3-14).2627---2829Улучшения интерпретатора:3031- [**PEP 649**](https://python-all.ru/3.16/whatsnew/3.14.html) и [**PEP 749**](https://python-all.ru/3.16/whatsnew/3.14.html): [Отложенное вычисление аннотаций](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-deferred-annotations)32- [**PEP 734**](https://python-all.ru/3.16/whatsnew/3.14.html): [Несколько интерпретаторов в стандартной библиотеке](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-multiple-interpreters)33- [**PEP 750**](https://python-all.ru/3.16/whatsnew/3.14.html): [Шаблонные строки](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-template-string-literals)34- [**PEP 758**](https://python-all.ru/3.16/whatsnew/3.14.html): [Разрешить выражения except и except\* без скобок](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-bracketless-except)35- [**PEP 765**](https://python-all.ru/3.16/whatsnew/3.14.html): [Управление потоком выполнения в блоках finally](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-finally-syntaxwarning)36- [**PEP 768**](https://python-all.ru/3.16/whatsnew/3.14.html): [Безопасный внешний интерфейс отладчика для CPython](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-remote-debugging)37- [Новый тип интерпретатора](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-tail-call-interpreter)38- [Улучшения в режиме свободных потоков](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-free-threaded-cpython)39- [Улучшенные сообщения об ошибках](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-improved-error-messages)40- [Инкрементальная сборка мусора](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-incremental-gc)4142Значительные улучшения в стандартной библиотеке:4344- [**PEP 784**](https://python-all.ru/3.16/whatsnew/3.14.html): [Поддержка Zstandard в стандартной библиотеке](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-zstandard)45- [Возможности интроспекции asyncio](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-asyncio-introspection)46- [Управление предупреждениями, безопасное для конкурентного доступа](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-concurrent-warnings-control)47- [Подсветка синтаксиса в стандартной интерактивной оболочке](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-pyrepl-highlighting) и цветной вывод в нескольких стандартных интерфейсах командной строки4849Улучшения C API:5051- [**PEP 741**](https://python-all.ru/3.16/whatsnew/3.14.html): [C API конфигурации Python](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-capi-config)5253Поддержка платформ:5455- [**PEP 776**](https://python-all.ru/3.16/whatsnew/3.14.html): Emscripten теперь является [официально поддерживаемой платформой](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-build-changes), на [**уровне 3**](https://python-all.ru/3.16/whatsnew/3.14.html).5657Изменения в выпуске:5859- [**PEP 779**](https://python-all.ru/3.16/whatsnew/3.14.html): [Free-threaded Python официально поддерживается](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-free-threaded-now-supported)60- [**PEP 761**](https://python-all.ru/3.16/whatsnew/3.14.html): [Подписи PGP больше не используются для официальных выпусков](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-no-more-pgp)61- [Двоичные сборки для Windows и macOS теперь поддерживают экспериментальный JIT-компилятор](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-jit-compiler)62- [Теперь предоставляются двоичные сборки для Android](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-build-changes)6364## Новые возможности6566### [**PEP 649**](https://python-all.ru/3.16/whatsnew/3.14.html) и [**PEP 749**](https://python-all.ru/3.16/whatsnew/3.14.html): Отложенное вычисление аннотаций6768[Аннотации](https://python-all.ru/3.16/glossary.html#term-annotation) функций, классов и модулей больше не вычисляются немедленно. Вместо этого аннотации сохраняются в специальных [функциях-аннотаторах](https://python-all.ru/3.16/glossary.html#term-annotate-function) и вычисляются только при необходимости (за исключением случаев, когда используется `from __future__ import annotations`).6970Это изменение призвано повысить производительность и удобство использования аннотаций в Python в большинстве случаев. Затраты во время выполнения на определение аннотаций сведены к минимуму, но по-прежнему можно просматривать аннотации во время выполнения. Больше не нужно заключать аннотации в строки, если они содержат прямые ссылки (forward references).7172Новый модуль [`annotationlib`](https://python-all.ru/3.16/library/annotationlib.html#module-annotationlib) предоставляет инструменты для просмотра отложенных аннотаций. Аннотации могут вычисляться в формате [`VALUE`](https://python-all.ru/3.16/library/annotationlib.html#annotationlib.Format.VALUE) (который вычисляет аннотации до значений времени выполнения, аналогично поведению в более ранних версиях Python), формате [`FORWARDREF`](https://python-all.ru/3.16/library/annotationlib.html#annotationlib.Format.FORWARDREF) (который заменяет неопределённые имена специальными маркерами) и формате [`STRING`](https://python-all.ru/3.16/library/annotationlib.html#annotationlib.Format.STRING) (который возвращает аннотации в виде строк).7374В этом примере показано поведение этих форматов:7576```pycon77>>> from annotationlib import get_annotations, Format78>>> def func(arg: Undefined):79... pass80>>> get_annotations(func, format=Format.VALUE)81Traceback (most recent call last):82 ...83NameError: name 'Undefined' is not defined84>>> get_annotations(func, format=Format.FORWARDREF)85{'arg': ForwardRef('Undefined', owner=<function func at 0x...>)}86>>> get_annotations(func, format=Format.STRING)87{'arg': 'Undefined'}88```8990Раздел [портирования](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-porting-annotations) содержит рекомендации по изменениям, которые могут потребоваться в связи с этими изменениями, хотя в большинстве случаев код продолжит работать без изменений.9192(Автор – Jelle Zijlstra, работа выполнена в [**PEP 749**](https://python-all.ru/3.16/whatsnew/3.14.html) и [gh-119180](https://python-all.ru/3.16/whatsnew/3.14.html); [**PEP 649**](https://python-all.ru/3.16/whatsnew/3.14.html) был написан Ларри Хастингсом.)9394> **См. также**95>96> **[**PEP 649**](https://python-all.ru/3.16/whatsnew/3.14.html)**97>98> Отложенное вычисление аннотаций с помощью дескрипторов99>100> **[**PEP 749**](https://python-all.ru/3.16/whatsnew/3.14.html)**101>102> Реализация PEP 649103104### [**PEP 734**](https://python-all.ru/3.16/whatsnew/3.14.html): Несколько интерпретаторов в стандартной библиотеке105106Среда выполнения CPython поддерживает одновременный запуск нескольких копий Python в одном процессе уже более 20 лет. Каждая такая отдельная копия называется «интерпретатором». Однако эта возможность была доступна только через [C-API](https://python-all.ru/3.16/c-api/subinterpreters.html#sub-interpreter-support).107108Это ограничение снято в Python 3.14 с появлением нового модуля [`concurrent.interpreters`](https://python-all.ru/3.16/library/concurrent.interpreters.html#module-concurrent.interpreters).109110Можно выделить как минимум две веские причины, почему использование нескольких интерпретаторов даёт значительные преимущества:111112- они поддерживают новую (для Python), удобную для человека модель конкурентности113- настоящий многоядерный параллелизм114115В некоторых случаях конкурентность в программном обеспечении повышает эффективность и может упростить архитектуру на высоком уровне. В то же время реализация и поддержка любой, кроме самой простой, конкурентности часто оказывается сложной задачей для человеческого мозга. Особенно это касается обычных потоков (например, [`threading`](https://python-all.ru/3.16/library/threading.html#module-threading)), где вся память разделяется между всеми потоками.116117С помощью нескольких изолированных интерпретаторов можно воспользоваться классом моделей конкурентности, такими как взаимодействующие последовательные процессы (CSP) или модель акторов, которые успешно применяются в других языках программирования, таких как Smalltalk, Erlang, Haskell и Go. Представляйте несколько интерпретаторов как потоки, но с общим доступом по желанию.118119Что касается многоядерного параллелизма: начиная с Python 3.12, интерпретаторы стали достаточно изолированы друг от друга, чтобы их можно было использовать параллельно (см. [**PEP 684**](https://python-all.ru/3.16/whatsnew/3.14.html)). Это открывает множество вариантов использования Python для задач с интенсивными вычислениями, которые ранее были ограничены [GIL](https://python-all.ru/3.16/glossary.html#term-GIL).120121Использование нескольких интерпретаторов во многом похоже на [`multiprocessing`](https://python-all.ru/3.16/library/multiprocessing.html#module-multiprocessing) тем, что оба подхода предоставляют изолированные логические «процессы», которые могут выполняться параллельно, без общего доступа по умолчанию. Однако при использовании нескольких интерпретаторов приложение будет потреблять меньше системных ресурсов и работать эффективнее (поскольку остаётся в рамках одного процесса). Представляйте несколько интерпретаторов как обладающих изоляцией процессов с эффективностью потоков.122123Хотя эта возможность существует уже десятилетия, несколько интерпретаторов не использовались широко из-за низкой осведомлённости и отсутствия модуля в стандартной библиотеке. В результате у них сейчас есть несколько заметных ограничений, которые, как ожидается, значительно улучшатся теперь, когда возможность становится мейнстримом.124125Текущие ограничения:126127- запуск каждого интерпретатора ещё не оптимизирован128- каждый интерпретатор использует больше памяти, чем необходимо (продолжается работа над обширным внутренним разделением между интерпретаторами)129- пока не так много вариантов *пока* для настоящего совместного использования объектов или других данных между интерпретаторами (кроме [`memoryview`](https://python-all.ru/3.16/library/stdtypes.html#memoryview))130- многие сторонние модули расширения на PyPI пока несовместимы с несколькими интерпретаторами (все модули расширения стандартной библиотеки *совместимы*)131- подход к написанию приложений, использующих несколько изолированных интерпретаторов, пока в основном незнаком пользователям Python132133Влияние этих ограничений будет зависеть от будущих улучшений CPython, того, как используются интерпретаторы, и от того, что сообщество решит с помощью пакетов PyPI. В зависимости от сценария использования ограничения могут не иметь большого значения, так что попробуйте!134135Кроме того, будущие выпуски CPython снизят или устранят накладные расходы и предоставят утилиты, которые менее уместны на PyPI. А пока большинство ограничений можно решить с помощью модулей расширения, то есть пакеты PyPI могут заполнить любые пробелы для версии 3.14 и даже для версии 3.12, где интерпретаторы наконец-то были должным образом изолированы и перестали разделять [GIL](https://python-all.ru/3.16/glossary.html#term-GIL). Также ожидается появление библиотек на PyPI для высокоуровневых абстракций на основе интерпретаторов.136137Что касается модулей расширения, ведётся работа по обновлению некоторых проектов на PyPI, а также таких инструментов, как Cython, pybind11, nanobind и PyO3. Шаги по изоляции модуля расширения описаны в [Isolating Extension Modules](https://python-all.ru/3.16/howto/isolating-extensions.html#isolating-extensions-howto). Изоляция модуля во многом пересекается с тем, что требуется для поддержки [free-threading](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-free-threaded-cpython), поэтому текущая работа сообщества в этой области поможет ускорить поддержку нескольких интерпретаторов.138139Также добавлено в 3.14: [concurrent.futures.InterpreterPoolExecutor](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-concurrent-futures-interp-pool).140141(Автор: Eric Snow в [gh-134939](https://python-all.ru/3.16/whatsnew/3.14.html).)142143> **См. также**144>145> [**PEP 734**](https://python-all.ru/3.16/whatsnew/3.14.html)146147### [**PEP 750**](https://python-all.ru/3.16/whatsnew/3.14.html): Шаблонные строковые литералы148149Шаблонные строки – это новый механизм для настраиваемой обработки строк. Они используют знакомый синтаксис f-строк, но, в отличие от f-строк, возвращают объект, представляющий статические и интерполированные части строки, вместо простого [`str`](https://python-all.ru/3.16/library/stdtypes.html#str).150151Чтобы написать t-строку, используйте префикс `'t'` вместо `'f'`:152153```pycon154>>> variety = 'Stilton'155>>> template = t'Try some {variety} cheese!'156>>> type(template)157<class 'string.templatelib.Template'>158```159160Объекты [`Template`](https://python-all.ru/3.16/library/string.templatelib.html#string.templatelib.Template) предоставляют доступ к статическим и интерполированным (в фигурных скобках) частям строки *до* их объединения. Перебирайте экземпляры `Template`, чтобы получить доступ к их частям по порядку:161162```pycon163>>> list(template)164['Try some ', Interpolation('Stilton', 'variety', None, ''), ' cheese!']165```166167Легко написать (или вызвать) код для обработки экземпляров `Template`. Например, вот функция, которая приводит статические части к нижнему регистру, а экземпляры [`Interpolation`](https://python-all.ru/3.16/library/string.templatelib.html#string.templatelib.Interpolation) к верхнему:168169```python170from string.templatelib import Interpolation171172def lower_upper(template):173 """Отображать статические части в нижнем регистре, а подстановки – в верхнем."""174 parts = []175 for part in template:176 if isinstance(part, Interpolation):177 parts.append(str(part.value).upper())178 else:179 parts.append(part.lower())180 return ''.join(parts)181182name = 'Wenslydale'183template = t'Mister {name}'184assert lower_upper(template) == 'mister WENSLYDALE'185```186187Поскольку экземпляры `Template` различают статические строки и интерполяции во время выполнения, они могут быть полезны для очистки пользовательского ввода. Написание функции `html()`, которая экранирует пользовательский ввод в HTML, оставляется читателю в качестве упражнения! Код обработки шаблонов может обеспечить повышенную гибкость. Например, более продвинутая функция `html()` могла бы принимать `dict` HTML-атрибутов непосредственно в шаблоне:188189```python190attributes = {'src': 'limburger.jpg', 'alt': 'lovely cheese'}191template = t'<img {attributes}>'192assert html(template) == '<img src="limburger.jpg" alt="lovely cheese" />'193```194195Конечно, код обработки шаблонов не обязан возвращать строкоподобный результат. Ещё более *продвинутая* `html()` могла бы возвращать пользовательский тип, представляющий DOM-подобную структуру.196197С появлением t-строк разработчики смогут писать системы, которые очищают SQL, выполняют безопасные операции с оболочкой, улучшают журналирование, реализуют современные идеи веб-разработки (HTML, CSS и так далее) и внедряют лёгкие пользовательские предметно-ориентированные языки (DSL) для бизнеса.198199(Авторы: Jim Baker, Guido van Rossum, Paul Everitt, Koudai Aono, Lysandros Nikolaou, Dave Peck, Adam Turner, Jelle Zijlstra, Bénédikt Tran, и Pablo Galindo Salgado в [gh-132661](https://python-all.ru/3.16/whatsnew/3.14.html).)200201> **См. также**202>203> [**PEP 750**](https://python-all.ru/3.16/whatsnew/3.14.html).204205### [**PEP 768**](https://python-all.ru/3.16/whatsnew/3.14.html): Безопасный интерфейс внешнего отладчика206207Python 3.14 представляет безопасный интерфейс отладки с нулевой нагрузкой, который позволяет отладчикам и профилировщикам безопасно подключаться к выполняющимся процессам Python без их остановки или перезапуска. Это значительное улучшение возможностей отладки Python, означающее, что небезопасные альтернативы больше не требуются.208209Новый интерфейс предоставляет безопасные точки выполнения для подключения кода отладчика без изменения обычного пути выполнения интерпретатора и без добавления какой-либо нагрузки во время выполнения. Благодаря этому инструменты теперь могут проверять и взаимодействовать с приложениями Python в реальном времени, что является критически важной возможностью для систем с высокой доступностью и производственных сред.210211Для удобства этот интерфейс реализован в функции [`sys.remote_exec()`](https://python-all.ru/3.16/library/sys.html#sys.remote_exec). Например:212213```python214import sys215from tempfile import NamedTemporaryFile216217with NamedTemporaryFile(mode='w', suffix='.py', delete=False) as f:218 script_path = f.name219 f.write(f'import my_debugger; my_debugger.connect({os.getpid()})')220221# Выполнить в процессе с PID 1234222print('Behold! An offering:')223sys.remote_exec(1234, script_path)224```225226Эта функция позволяет отправлять код Python для выполнения в целевом процессе в следующей безопасной точке выполнения. Однако разработчики инструментов могут также реализовать протокол напрямую, как описано в PEP, где подробно описаны базовые механизмы, используемые для безопасного подключения к выполняющимся процессам.227228Интерфейс отладки был тщательно спроектирован с учетом безопасности и включает несколько механизмов управления доступом:229230- Переменная окружения [`PYTHON_DISABLE_REMOTE_DEBUG`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_DISABLE_REMOTE_DEBUG).231- Параметр командной строки [`-X disable-remote-debug`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X).232- Флаг конфигурации [`--without-remote-debug`](https://python-all.ru/3.16/using/configure.html#cmdoption-without-remote-debug) для полного отключения этой функции во время сборки.233234(Авторы: Pablo Galindo Salgado, Matt Wozniski и Ivona Stojanovic в [gh-131591](https://python-all.ru/3.16/whatsnew/3.14.html).)235236> **См. также**237>238> [**PEP 768**](https://python-all.ru/3.16/whatsnew/3.14.html).239240### Новый тип интерпретатора241242В CPython добавлен новый тип интерпретатора. Он использует хвостовые вызовы между небольшими функциями на C, реализующими отдельные байткоды Python, вместо одного большого оператора `case` на C. Для некоторых более новых компиляторов этот интерпретатор обеспечивает значительно более высокую производительность. Предварительные тесты показывают среднее геометрическое ускорение на 3–5% по стандартному набору тестов `pyperformance` в зависимости от платформы и архитектуры. За базовую точку взят Python 3.14, собранный с Clang 19, без этого нового интерпретатора.243244В настоящее время этот интерпретатор работает только с Clang 19 и новее на архитектурах x86-64 и AArch64. Однако ожидается, что будущие релизы GCC также будут это поддерживать.245246Эта функция пока включается по желанию. При использовании нового интерпретатора настоятельно рекомендуется включить профильно-ориентированную оптимизацию, так как это единственная конфигурация, которая была протестирована и подтверждена для повышения производительности. Дополнительную информацию см. в [`--with-tail-call-interp`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-tail-call-interp).247248> **Примечание**249>250> Это не следует путать с [оптимизацией хвостовых вызовов](https://python-all.ru/3.16/whatsnew/3.14.html) функций Python, которая в настоящее время не реализована в CPython.251>252> Этот новый тип интерпретатора является внутренней деталью реализации интерпретатора CPython. Он вообще не меняет видимое поведение программ Python. Он может повысить их производительность, но не меняет ничего остального.253254(Авторы: Ken Jin в [gh-128563](https://python-all.ru/3.16/whatsnew/3.14.html), идеи по реализации в CPython от Mark Shannon, Garrett Gu, Haoran Xu и Josh Haberman.)255256### Улучшения свободно-поточного режима257258Свободно-поточный режим CPython ([**PEP 703**](https://python-all.ru/3.16/whatsnew/3.14.html)), изначально добавленный в версии 3.13, был значительно улучшен в Python 3.14. Реализация, описанная в PEP 703, завершена, включая изменения в C API, а временные обходные решения в интерпретаторе были заменены на более постоянные. Специализирующийся адаптивный интерпретатор ([**PEP 659**](https://python-all.ru/3.16/whatsnew/3.14.html)) теперь включен в свободно-поточном режиме, что наряду со многими другими оптимизациями значительно повышает его производительность. Штраф по производительности для однопоточного кода в свободно-поточном режиме теперь составляет примерно 5–10% в зависимости от платформы и используемого компилятора C.259260Начиная с Python 3.14, при компиляции модулей расширения для свободно-поточной сборки CPython в Windows, переменная препроцессора `Py_GIL_DISABLED` теперь должна указываться сборочным бэкендом, так как она больше не будет определяться автоматически компилятором C. Для выполняющегося интерпретатора параметр, использовавшийся во время компиляции, можно найти с помощью [`sysconfig.get_config_var()`](https://python-all.ru/3.16/library/sysconfig.html#sysconfig.get_config_var).261262Новый флаг [`-X context_aware_warnings`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X) управляет тем, включена ли [защита предупреждений о параллельном доступе](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-concurrent-warnings-control). По умолчанию флаг равен true для свободно-поточной сборки и false для сборки с GIL.263264Добавлен новый флаг [`thread_inherit_context`](https://python-all.ru/3.16/library/sys.html#sys.flags.thread_inherit_context), который, если включен, означает, что потоки, созданные с помощью [`threading.Thread`](https://python-all.ru/3.16/library/threading.html#threading.Thread), запускаются с копией [`Context()`](https://python-all.ru/3.16/library/contextvars.html#contextvars.Context) вызывающего [`start()`](https://python-all.ru/3.16/library/threading.html#threading.Thread.start). Наиболее важно, это делает контекст фильтрации предупреждений, установленный с помощью [`catch_warnings`](https://python-all.ru/3.16/library/warnings.html#warnings.catch_warnings), «наследуемым» потоками (или задачами asyncio), запущенными в этом контексте. Это также влияет на другие модули, использующие контекстные переменные, такие как менеджер контекста [`decimal`](https://python-all.ru/3.16/library/decimal.html#module-decimal). По умолчанию этот флаг равен true для свободно-поточной сборки и false для сборки с GIL.265266(Авторы: Sam Gross, Matt Page, Neil Schemenauer, Thomas Wouters, Donghee Na, Kirill Podoprigora, Ken Jin, Itamar Oren, Brett Simmers, Dino Viehland, Nathan Goldbaum, Ralf Gommers, Lysandros Nikolaou, Kumar Aditya, Edgar Margffoy и многие другие. Некоторые из этих авторов работают в Meta, которая продолжает предоставлять значительные инженерные ресурсы для поддержки этого проекта.)267268### Улучшенные сообщения об ошибках269270- Теперь интерпретатор предлагает полезные подсказки, когда обнаруживает опечатки в ключевых словах Python. Если встречается слово, похожее на ключевое слово Python, интерпретатор предложит правильное ключевое слово в сообщении об ошибке. Эта функция помогает программистам быстро находить и исправлять распространенные опечатки. Например:271272 ```pycon273 >>> whille True:274 ... pass275 Traceback (most recent call last):276 File "<stdin>", line 1277 whille True:278 ^^^^^^279 SyntaxError: invalid syntax. Did you mean 'while'?280 ```281282 Хотя функция ориентирована на наиболее распространенные случаи, некоторые варианты опечаток могут по-прежнему приводить к обычным синтаксическим ошибкам. (Автор: Pablo Galindo в [gh-132449](https://python-all.ru/3.16/whatsnew/3.14.html).)283- Операторы [`elif`](https://python-all.ru/3.16/reference/compound_stmts.html#elif), следующие за блоком [`else`](https://python-all.ru/3.16/reference/compound_stmts.html#else), теперь имеют специальное сообщение об ошибке. (Автор: Steele Farnsworth в [gh-129902](https://python-all.ru/3.16/whatsnew/3.14.html).)284285 ```pycon286 >>> if who == "me":287 ... print("It's me!")288 ... else:289 ... print("It's not me!")290 ... elif who is None:291 ... print("Who is it?")292 File "<stdin>", line 5293 elif who is None:294 ^^^^295 SyntaxError: 'elif' block follows an 'else' block296 ```297- Если оператор передается в [условные выражения](https://python-all.ru/3.16/reference/expressions.html#if-expr) после [`else`](https://python-all.ru/3.16/reference/compound_stmts.html#else), или один из [`pass`](https://python-all.ru/3.16/reference/simple_stmts.html#pass), [`break`](https://python-all.ru/3.16/reference/simple_stmts.html#break) или [`continue`](https://python-all.ru/3.16/reference/simple_stmts.html#continue) передается перед [`if`](https://python-all.ru/3.16/reference/compound_stmts.html#if), то в сообщении об ошибке подсвечивается, где требуется [`expression`](https://python-all.ru/3.16/reference/expressions.html#grammar-token-python-grammar-expression). (Автор: Sergey Miryanov в [gh-129515](https://python-all.ru/3.16/whatsnew/3.14.html).)298299 ```pycon300 >>> x = 1 if True else pass301 Traceback (most recent call last):302 File "<string>", line 1303 x = 1 if True else pass304 ^^^^305 SyntaxError: expected expression after 'else', but statement is given306307 >>> x = continue if True else break308 Traceback (most recent call last):309 File "<string>", line 1310 x = continue if True else break311 ^^^^^^^^312 SyntaxError: expected expression before 'if', but statement is given313 ```314- Когда обнаруживаются неправильно закрытые строки, сообщение об ошибке предполагает, что строка, возможно, должна быть частью строки. (Автор: Pablo Galindo в [gh-88535](https://python-all.ru/3.16/whatsnew/3.14.html).)315316 ```pycon317 >>> "The interesting object "The important object" is very important"318 Traceback (most recent call last):319 SyntaxError: invalid syntax. Is this intended to be part of the string?320 ```321- Когда строки имеют несовместимые префиксы, сообщение об ошибке теперь показывает, какие префиксы несовместимы. (Автор: Nikita Sobolev в [gh-133197](https://python-all.ru/3.16/whatsnew/3.14.html).)322323 ```pycon324 >>> ub'abc'325 File "<python-input-0>", line 1326 ub'abc'327 ^^328 SyntaxError: 'u' and 'b' prefixes are incompatible329 ```330- Улучшены сообщения об ошибках при использовании `as` с несовместимыми целями в:331332 - Импорты: `import ... as ...`333 - Импорты from: `from ... import ... as ...`334 - Обработчики исключений: `except ... as ...`335 - Варианты сопоставления с образцом: `case ... as ...`336337 (Автор: Никита Соболев в [gh-123539](https://python-all.ru/3.16/whatsnew/3.14.html), [gh-123562](https://python-all.ru/3.16/whatsnew/3.14.html) и [gh-123440](https://python-all.ru/3.16/whatsnew/3.14.html).)338- Улучшено сообщение об ошибке при попытке добавить экземпляр нехэшируемого типа в [`dict`](https://python-all.ru/3.16/library/stdtypes.html#dict) или [`set`](https://python-all.ru/3.16/library/stdtypes.html#set). (Авторы: CF Bolz-Tereick и Виктор Стиннер в [gh-132828](https://python-all.ru/3.16/whatsnew/3.14.html).)339340 ```pycon341 >>> s = set()342 >>> s.add({'pages': 12, 'grade': 'A'})343 Traceback (most recent call last):344 File "<python-input-1>", line 1, in <module>345 s.add({'pages': 12, 'grade': 'A'})346 ~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^347 TypeError: cannot use 'dict' as a set element (unhashable type: 'dict')348 >>> d = {}349 >>> l = [1, 2, 3]350 >>> d[l] = 12351 Traceback (most recent call last):352 File "<python-input-4>", line 1, in <module>353 d[l] = 12354 ~^^^355 TypeError: cannot use 'list' as a dict key (unhashable type: 'list')356 ```357- Улучшено сообщение об ошибке, когда объект, поддерживающий синхронный протокол менеджера контекста, используется с [`async with`](https://python-all.ru/3.16/reference/compound_stmts.html#async-with) вместо [`with`](https://python-all.ru/3.16/reference/compound_stmts.html#with), и наоборот для асинхронного протокола. (Автор: Бенедикт Тран в [gh-128398](https://python-all.ru/3.16/whatsnew/3.14.html).)358359### [**PEP 784**](https://python-all.ru/3.16/whatsnew/3.14.html): поддержка Zstandard в стандартной библиотеке360361Новый пакет `compression` содержит модули `compression.lzma`, `compression.bz2`, `compression.gzip` и `compression.zlib`, которые реэкспортируют модули [`lzma`](https://python-all.ru/3.16/library/lzma.html#module-lzma), [`bz2`](https://python-all.ru/3.16/library/bz2.html#module-bz2), [`gzip`](https://python-all.ru/3.16/library/gzip.html#module-gzip) и [`zlib`](https://python-all.ru/3.16/library/zlib.html#module-zlib) соответственно. Новые имена импорта в `compression` являются предпочтительными для импорта этих модулей сжатия, начиная с Python 3.14. Однако существующие имена модулей не были объявлены устаревшими. Любое объявление устаревшими или удаление существующих модулей сжатия произойдёт не ранее, чем через пять лет после выхода версии 3.14.362363Новый модуль `compression.zstd` предоставляет API для сжатия и распаковки в формате Zstandard через привязки к [библиотеке zstd от Meta](https://python-all.ru/3.16/whatsnew/3.14.html). Zstandard – широко используемый, эффективный и быстрый формат сжатия. В дополнение к API, представленным в `compression.zstd`, поддержка чтения и записи архивов, сжатых Zstandard, была добавлена в модули [`tarfile`](https://python-all.ru/3.16/library/tarfile.html#module-tarfile), [`zipfile`](https://python-all.ru/3.16/library/zipfile.html#module-zipfile) и [`shutil`](https://python-all.ru/3.16/library/shutil.html#module-shutil).364365Вот пример использования нового модуля для сжатия данных:366367```python368from compression import zstd369import math370371data = str(math.pi).encode() * 20372compressed = zstd.compress(data)373ratio = len(compressed) / len(data)374print(f"Achieved compression ratio of {ratio}")375```376377Как видно, API аналогичен API модулей `lzma` и `bz2`.378379(Авторы: Эмма Харпер Смит, Адам Тёрнер, Грегори П. Смит, Томас Роун, Виктор Стиннер и Рогдам в [gh-132983](https://python-all.ru/3.16/whatsnew/3.14.html).)380381> **См. также**382>383> [**PEP 784**](https://python-all.ru/3.16/whatsnew/3.14.html).384385### Возможности интроспекции asyncio386387Добавлен новый интерфейс командной строки для просмотра работающих процессов Python с использованием асинхронных задач, доступный через `python -m asyncio ps PID` или `python -m asyncio pstree PID`.388389Подкоманда `ps` проверяет указанный идентификатор процесса (PID) и отображает информацию о текущих запущенных задачах asyncio. Она выводит таблицу задач: плоский список всех задач, их имена, стеки корутин и информацию о том, какие задачи ожидают их.390391Подкоманда `pstree` получает ту же информацию, но вместо этого отображает визуальное дерево асинхронных вызовов, показывая связи корутин в иерархическом формате. Эта команда особенно полезна для отладки долго выполняющихся или зависших асинхронных программ. Она помогает разработчикам быстро определить, где программа заблокирована, какие задачи ожидают выполнения и как корутины связаны между собой.392393Например, для такого кода:394395```python396import asyncio397398async def play_track(track):399 await asyncio.sleep(5)400 print(f'🎵 Finished: {track}')401402async def play_album(name, tracks):403 async with asyncio.TaskGroup() as tg:404 for track in tracks:405 tg.create_task(play_track(track), name=track)406407async def main():408 async with asyncio.TaskGroup() as tg:409 tg.create_task(410 play_album('Sundowning', ['TNDNBTG', 'Levitate']),411 name='Sundowning')412 tg.create_task(413 play_album('TMBTE', ['DYWTYLM', 'Aqua Regia']),414 name='TMBTE')415416if __name__ == '__main__':417 asyncio.run(main())418```419420Запуск нового инструмента на работающем процессе выведет таблицу, подобную этой:421422```bash423python -m asyncio ps 12345424425tid task id task name coroutine stack awaiter chain awaiter name awaiter id426------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------4271935500 0x7fc930c18050 Task-1 TaskGroup._aexit -> TaskGroup.__aexit__ -> main 0x04281935500 0x7fc930c18230 Sundowning TaskGroup._aexit -> TaskGroup.__aexit__ -> album TaskGroup._aexit -> TaskGroup.__aexit__ -> main Task-1 0x7fc930c180504291935500 0x7fc93173fa50 TMBTE TaskGroup._aexit -> TaskGroup.__aexit__ -> album TaskGroup._aexit -> TaskGroup.__aexit__ -> main Task-1 0x7fc930c180504301935500 0x7fc93173fdf0 TNDNBTG sleep -> play TaskGroup._aexit -> TaskGroup.__aexit__ -> album Sundowning 0x7fc930c182304311935500 0x7fc930d32510 Levitate sleep -> play TaskGroup._aexit -> TaskGroup.__aexit__ -> album Sundowning 0x7fc930c182304321935500 0x7fc930d32890 DYWTYLM sleep -> play TaskGroup._aexit -> TaskGroup.__aexit__ -> album TMBTE 0x7fc93173fa504331935500 0x7fc93161ec30 Aqua Regia sleep -> play TaskGroup._aexit -> TaskGroup.__aexit__ -> album TMBTE 0x7fc93173fa50434```435436или дерево, подобное этому:437438```bash439python -m asyncio pstree 12345440441└── (T) Task-1442 └── main example.py:13443 └── TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72444 └── TaskGroup._aexit Lib/asyncio/taskgroups.py:121445 ├── (T) Sundowning446 │ └── album example.py:8447 │ └── TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72448 │ └── TaskGroup._aexit Lib/asyncio/taskgroups.py:121449 │ ├── (T) TNDNBTG450 │ │ └── play example.py:4451 │ │ └── sleep Lib/asyncio/tasks.py:702452 │ └── (T) Levitate453 │ └── play example.py:4454 │ └── sleep Lib/asyncio/tasks.py:702455 └── (T) TMBTE456 └── album example.py:8457 └── TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72458 └── TaskGroup._aexit Lib/asyncio/taskgroups.py:121459 ├── (T) DYWTYLM460 │ └── play example.py:4461 │ └── sleep Lib/asyncio/tasks.py:702462 └── (T) Aqua Regia463 └── play example.py:4464 └── sleep Lib/asyncio/tasks.py:702465```466467Если в графе async await обнаружен цикл (что может указывать на проблему в программе), инструмент выдаёт ошибку и перечисляет пути цикла, которые препятствуют построению дерева:468469```bash470python -m asyncio pstree 12345471472ERROR: await-graph contains cycles - cannot print a tree!473474cycle: Task-2 → Task-3 → Task-2475```476477(Авторы: Пабло Галиндо, Лукаш Ланга, Юрий Селиванов и Марта Гомес Масиас в [gh-91048](https://python-all.ru/3.16/whatsnew/3.14.html).)478479### Контроль предупреждений, безопасный для конкурентного доступа480481Менеджер контекста [`warnings.catch_warnings`](https://python-all.ru/3.16/library/warnings.html#warnings.catch_warnings) теперь опционально может использовать контекстную переменную для фильтров предупреждений. Это включается установкой флага [`context_aware_warnings`](https://python-all.ru/3.16/library/sys.html#sys.flags.context_aware_warnings) либо с помощью опции командной строки `-X`, либо через переменную окружения. Это обеспечивает предсказуемое управление предупреждениями при использовании `catch_warnings` совместно с несколькими потоками или асинхронными задачами. По умолчанию флаг равен true для сборки со свободной многопоточностью и false для сборки с GIL.482483(Авторы: Нил Шеменауэр и Кумар Адитья в [gh-130010](https://python-all.ru/3.16/whatsnew/3.14.html).)484485## Прочие изменения в языке486487- Все кодовые страницы Windows теперь поддерживаются как кодеки 'cpXXX' в Windows. (Автор: Сергей Сторчака в [gh-123803](https://python-all.ru/3.16/whatsnew/3.14.html).)488- Реализованы правила арифметики смешанного режима для действительных и комплексных чисел, как определено стандартом C, начиная с C99. (Автор: Сергей Б. Кирпичев в [gh-69639](https://python-all.ru/3.16/whatsnew/3.14.html).)489- Теперь больше синтаксических ошибок обнаруживается независимо от оптимизации и опции командной строки [`-O`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-O). Это включает запись в `__debug__`, неверное использование [`await`](https://python-all.ru/3.16/reference/expressions.html#await) и асинхронные включения вне асинхронных функций. Например, `python -O -c 'assert (__debug__ := 1)'` или `python -O -c 'assert await 1'` теперь приводят к [`SyntaxError`](https://python-all.ru/3.16/library/exceptions.html#SyntaxError). (Авторы: Ирит Катриэль и Йелле Зейлстра в [gh-122245](https://python-all.ru/3.16/whatsnew/3.14.html) и [gh-121637](https://python-all.ru/3.16/whatsnew/3.14.html).)490- При наследовании от чистого C-типа C-слоты для нового типа больше не заменяются обёрнутой версией при создании класса, если они не переопределены явно в подклассе. (Автор: Томаш Пытель в [gh-132284](https://python-all.ru/3.16/whatsnew/3.14.html).)491492### Встроенные493494- Методы [`bytes.fromhex()`](https://python-all.ru/3.16/library/stdtypes.html#bytes.fromhex) и [`bytearray.fromhex()`](https://python-all.ru/3.16/library/stdtypes.html#bytearray.fromhex) теперь принимают ASCII [`bytes`](https://python-all.ru/3.16/library/stdtypes.html#bytes) и [байтоподобные объекты](https://python-all.ru/3.16/glossary.html#term-bytes-like-object). (Автор: Daniel Pope в [gh-129349](https://python-all.ru/3.16/whatsnew/3.14.html).)495- Добавлены методы класса [`float.from_number()`](https://python-all.ru/3.16/library/stdtypes.html#float.from_number) и [`complex.from_number()`](https://python-all.ru/3.16/library/stdtypes.html#complex.from_number) для преобразования числа в тип [`float`](https://python-all.ru/3.16/library/functions.html#float) или [`complex`](https://python-all.ru/3.16/library/functions.html#complex) соответственно. Они вызывают [`TypeError`](https://python-all.ru/3.16/library/exceptions.html#TypeError), если аргумент не является вещественным числом. (Автор: Serhiy Storchaka в [gh-84978](https://python-all.ru/3.16/whatsnew/3.14.html).)496- Поддержка символов подчёркивания и запятой в качестве разделителей разрядов в дробной части для типов представления чисел с плавающей запятой в новом стиле форматирования строк (с помощью [`format()`](https://python-all.ru/3.16/library/functions.html#format) или [f-строк](https://python-all.ru/3.16/reference/lexical_analysis.html#f-strings)). (Автор: Sergey B Kirpichev в [gh-87790](https://python-all.ru/3.16/whatsnew/3.14.html).)497- Функция [`int()`](https://python-all.ru/3.16/library/functions.html#int) больше не делегирует вызов [`__trunc__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__trunc__). Классы, которые хотят поддерживать преобразование в `int()`, должны реализовать либо [`__int__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__int__), либо [`__index__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__index__). (Автор: Mark Dickinson в [gh-119743](https://python-all.ru/3.16/whatsnew/3.14.html).)498- Функция [`map()`](https://python-all.ru/3.16/library/functions.html#map) теперь имеет необязательный флаг *strict*, передаваемый только по ключу, как и [`zip()`](https://python-all.ru/3.16/library/functions.html#zip), для проверки, что все итерируемые объекты имеют одинаковую длину. (Автор: Wannes Boeykens в [gh-119793](https://python-all.ru/3.16/whatsnew/3.14.html).)499- Тип [`memoryview`](https://python-all.ru/3.16/library/stdtypes.html#memoryview) теперь поддерживает индексацию, что делает его [обобщённым типом](https://python-all.ru/3.16/glossary.html#term-generic-type). (Автор: Brian Schubert в [gh-126012](https://python-all.ru/3.16/whatsnew/3.14.html).)500- Использование [`NotImplemented`](https://python-all.ru/3.16/library/constants.html#NotImplemented) в логическом контексте теперь вызывает [`TypeError`](https://python-all.ru/3.16/library/exceptions.html#TypeError). Ранее, начиная с Python 3.9, это вызывало [`DeprecationWarning`](https://python-all.ru/3.16/library/exceptions.html#DeprecationWarning). (Автор: Jelle Zijlstra в [gh-118767](https://python-all.ru/3.16/whatsnew/3.14.html).)501- Трёхаргументный [`pow()`](https://python-all.ru/3.16/library/functions.html#pow) теперь пытается вызвать [`__rpow__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__rpow__) при необходимости. Ранее он вызывался только в двухаргументном `pow()` и бинарном операторе возведения в степень. (Автор: Serhiy Storchaka в [gh-130104](https://python-all.ru/3.16/whatsnew/3.14.html).)502- Объекты [`super`](https://python-all.ru/3.16/library/functions.html#super) теперь являются [`copyable`](https://python-all.ru/3.16/library/copy.html#module-copy) и [`pickleable`](https://python-all.ru/3.16/library/pickle.html#module-pickle). (Автор: Serhiy Storchaka в [gh-125767](https://python-all.ru/3.16/whatsnew/3.14.html).)503504### Командная строка и окружение505506- Флаг времени импорта теперь может отслеживать модули, которые уже загружены («кэшированы»), с помощью нового [`-X importtime=2`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X). При импорте такого модуля время `self` и `cumulative` заменяются строкой `cached`.507508 Значения выше `2` для `-X importtime` теперь зарезервированы для будущего использования.509510 (Авторы: Noah Kim и Adam Turner в [gh-118655](https://python-all.ru/3.16/whatsnew/3.14.html).)511- Опция командной строки [`-c`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-c) теперь автоматически убирает отступы у своего аргумента с кодом перед выполнением. (Авторы: Jon Crall и Steven Sun, [gh-103998](https://python-all.ru/3.16/whatsnew/3.14.html).)512- `-J` больше не является зарезервированным флагом для [Jython](https://python-all.ru/3.16/whatsnew/3.14.html), и теперь не имеет особого значения. (Автор: Adam Turner в [gh-133336](https://python-all.ru/3.16/whatsnew/3.14.html).)513514### PEP 758: Разрешить выражения `except` и `except*` без скобок515516Выражения [`except`](https://python-all.ru/3.16/reference/compound_stmts.html#except) и [`except*`](https://python-all.ru/3.16/reference/compound_stmts.html#except-star) теперь позволяют опускать скобки при наличии нескольких типов исключений и отсутствии предложения `as`. Например:517518```python519try:520 connect_to_server()521except TimeoutError, ConnectionRefusedError:522 print('The network has ceased to be!')523```524525(Авторы: Pablo Galindo и Brett Cannon в [**PEP 758**](https://python-all.ru/3.16/whatsnew/3.14.html) и [gh-131831](https://python-all.ru/3.16/whatsnew/3.14.html).)526527### PEP 765: Управление потоком в блоках [`finally`](https://python-all.ru/3.16/reference/compound_stmts.html#finally)528529Компилятор теперь выдаёт [`SyntaxWarning`](https://python-all.ru/3.16/library/exceptions.html#SyntaxWarning), когда операторы [`return`](https://python-all.ru/3.16/reference/simple_stmts.html#return), [`break`](https://python-all.ru/3.16/reference/simple_stmts.html#break) или [`continue`](https://python-all.ru/3.16/reference/simple_stmts.html#continue) приводят к выходу из блока [`finally`](https://python-all.ru/3.16/reference/compound_stmts.html#finally). Это изменение описано в [**PEP 765**](https://python-all.ru/3.16/whatsnew/3.14.html).530531В ситуациях, когда это изменение неудобно (например, когда предупреждения избыточны из-за линтинга кода), можно использовать [фильтр предупреждений](https://python-all.ru/3.16/library/warnings.html#warning-filter), чтобы отключить все синтаксические предупреждения, добавив `ignore::SyntaxWarning` в качестве фильтра. Это можно указать в сочетании с фильтром, преобразующим другие предупреждения в ошибки (например, передав `-Werror -Wignore::SyntaxWarning` в качестве параметров командной строки или установив `PYTHONWARNINGS=error,ignore::SyntaxWarning`).532533Обратите внимание, что применение такого фильтра во время выполнения с помощью модуля [`warnings`](https://python-all.ru/3.16/library/warnings.html#module-warnings) подавит предупреждение только в коде, который компилируется *после* настройки фильтра. Код, скомпилированный до настройки фильтра (например, при импорте модуля), всё равно будет выдавать синтаксическое предупреждение.534535(Автор: Irit Katriel в [gh-130080](https://python-all.ru/3.16/whatsnew/3.14.html).)536537### Сборка мусора538539**Начиная с Python 3.14.5:**540541Сборщик мусора (GC) изменился в Python 3.14.5.542543Python 3.14.0–3.14.4 поставлялся с новым инкрементальным GC. Однако из-за ряда [сообщений](https://python-all.ru/3.16/whatsnew/3.14.html) о значительном давлении на память в производственных средах он был возвращён обратно к поколенческому GC из 3.13. Этот GC теперь используется в Python 3.14.5 и более поздних версиях.544545**Ранее в Python 3.14.0–3.14.4:**546547Сборщик мусора циклов теперь инкрементальный. Это означает, что максимальное время пауз сокращается на порядок и более для больших куч.548549Теперь есть только два поколения: молодое и старое. Когда [`gc.collect()`](https://python-all.ru/3.16/library/gc.html#gc.collect) не вызывается напрямую, GC вызывается немного реже. При вызове он собирает молодое поколение и часть старого поколения, вместо сбора одного или нескольких поколений.550551Поведение `gc.collect()` немного меняется:552553- `gc.collect(1)`: выполняет инкремент сборки мусора, а не сбор поколения 1.554- Другие вызовы `gc.collect()` не изменились.555556(Автор: Mark Shannon в [gh-108362](https://python-all.ru/3.16/whatsnew/3.14.html).)557558### Интерактивная оболочка по умолчанию559560- Интерактивная оболочка по умолчанию [теперь подсвечивает синтаксис Python](https://python-all.ru/3.16/glossary.html#term-interactive). Эта функция включена по умолчанию, за исключением случаев, когда задана [`PYTHON_BASIC_REPL`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_BASIC_REPL) или любая другая переменная окружения, отключающая цвет. Подробнее см. [Управление цветом](https://python-all.ru/3.16/using/cmdline.html#using-on-controlling-color).561562 Цветовая тема по умолчанию для подсветки синтаксиса стремится к хорошему контрасту и использует исключительно стандартные 4-битные ANSI-коды цветов VGA для максимальной совместимости. Тему можно настроить с помощью экспериментального API `_colorize.set_theme()`. Его можно вызвать в интерактивном режиме или в скрипте [`PYTHONSTARTUP`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONSTARTUP). Обратите внимание: эта функция не имеет гарантий стабильности и может быть изменена или удалена.563564 (Автор: Łukasz Langa в [gh-131507](https://python-all.ru/3.16/whatsnew/3.14.html).)565- Интерактивная оболочка по умолчанию [теперь поддерживает автодополнение импорта](https://python-all.ru/3.16/glossary.html#term-interactive). Это означает, что при вводе `import co` и нажатии `<Tab>` будут предлагаться модули, начинающиеся с `co`. Аналогично, при вводе `from concurrent import i` будут предлагаться подмодули `concurrent`, начинающиеся с `i`. Обратите внимание: автодополнение атрибутов модулей пока не поддерживается. (Автор: Tomas Roun в [gh-69605](https://python-all.ru/3.16/whatsnew/3.14.html).)566567## Новые модули568569- [`annotationlib`](https://python-all.ru/3.16/library/annotationlib.html#module-annotationlib): Для интроспекции [аннотаций](https://python-all.ru/3.16/glossary.html#term-annotation). Подробнее см. [PEP 749](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-deferred-annotations). (Автор: Jelle Zijlstra в [gh-119180](https://python-all.ru/3.16/whatsnew/3.14.html).)570- [`compression`](https://python-all.ru/3.16/library/compression.html#module-compression) (включая [`compression.zstd`](https://python-all.ru/3.16/library/compression.zstd.html#module-compression.zstd)): Пакет для модулей, связанных со сжатием, включая новый модуль для поддержки формата сжатия Zstandard. Подробнее см. [PEP 784](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-zstandard). (Авторы: Emma Harper Smith, Adam Turner, Gregory P. Smith, Tomas Roun, Victor Stinner и Rogdham в [gh-132983](https://python-all.ru/3.16/whatsnew/3.14.html).)571- [`concurrent.interpreters`](https://python-all.ru/3.16/library/concurrent.interpreters.html#module-concurrent.interpreters): Поддержка нескольких интерпретаторов в стандартной библиотеке. Подробнее см. [PEP 734](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-multiple-interpreters). (Автор: Eric Snow в [gh-134939](https://python-all.ru/3.16/whatsnew/3.14.html).)572- [`string.templatelib`](https://python-all.ru/3.16/library/string.templatelib.html#module-string.templatelib): Поддержка шаблонных строковых литералов (t-строк). Подробнее см. [PEP 750](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-template-string-literals). (Авторы: Jim Baker, Guido van Rossum, Paul Everitt, Koudai Aono, Lysandros Nikolaou, Dave Peck, Adam Turner, Jelle Zijlstra, Bénédikt Tran и Pablo Galindo Salgado в [gh-132661](https://python-all.ru/3.16/whatsnew/3.14.html).)573574## Улучшенные модули575576### argparse577578- Значение по умолчанию [имени программы](https://python-all.ru/3.16/library/argparse.html#prog) для [`argparse.ArgumentParser`](https://python-all.ru/3.16/library/argparse.html#argparse.ArgumentParser) теперь отражает способ, которым интерпретатору Python было указано найти код модуля `__main__`. (Авторы: Serhiy Storchaka и Alyssa Coghlan в [gh-66436](https://python-all.ru/3.16/whatsnew/3.14.html).)579- Добавлен необязательный параметр *suggest\_on\_error* в [`argparse.ArgumentParser`](https://python-all.ru/3.16/library/argparse.html#argparse.ArgumentParser), позволяющий предлагать варианты для выбора аргументов и имена подпарсеров при опечатке со стороны пользователя. (Автор: Savannah Ostrowski в [gh-124456](https://python-all.ru/3.16/whatsnew/3.14.html).)580- Включен цвет для текста справки; его можно отключить с помощью необязательного параметра *color* в [`argparse.ArgumentParser`](https://python-all.ru/3.16/library/argparse.html#argparse.ArgumentParser). Это также можно контролировать через [переменные окружения](https://python-all.ru/3.16/using/cmdline.html#using-on-controlling-color). (Автор: Hugo van Kemenade в [gh-130645](https://python-all.ru/3.16/whatsnew/3.14.html).)581582### ast583584- Добавлена [`compare()`](https://python-all.ru/3.16/library/ast.html#ast.compare) – функция для сравнения двух AST. (Авторы: Batuhan Taskaya и Jeremy Hylton в [gh-60191](https://python-all.ru/3.16/whatsnew/3.14.html).)585- Добавлена поддержка [`copy.replace()`](https://python-all.ru/3.16/library/copy.html#copy.replace) для узлов AST. (Автор: Bénédikt Tran в [gh-121141](https://python-all.ru/3.16/whatsnew/3.14.html).)586- Док-строки теперь удаляются из оптимизированного AST на уровне оптимизации 2. (Автор: Irit Katriel в [gh-123958](https://python-all.ru/3.16/whatsnew/3.14.html).)587- Вывод [`repr()`](https://python-all.ru/3.16/library/functions.html#repr) для узлов AST теперь включает больше информации. (Автор: Tomas Roun в [gh-116022](https://python-all.ru/3.16/whatsnew/3.14.html).)588- При вызове с AST на входе функция [`parse()`](https://python-all.ru/3.16/library/ast.html#ast.parse) теперь всегда проверяет, что тип корневого узла является подходящим. (Автор: Irit Katriel в [gh-130139](https://python-all.ru/3.16/whatsnew/3.14.html).)589- Добавлены новые опции в интерфейс командной строки: [`--feature-version`](https://python-all.ru/3.16/library/ast.html#cmdoption-ast-feature-version), [`--optimize`](https://python-all.ru/3.16/library/ast.html#cmdoption-ast-optimize) и [`--show-empty`](https://python-all.ru/3.16/library/ast.html#cmdoption-ast-show-empty). (Автор: Semyon Moroz в [gh-133367](https://python-all.ru/3.16/whatsnew/3.14.html).)590591### asyncio592593- Функция и методы с именем `create_task()` теперь принимают произвольный список именованных аргументов. Все именованные аргументы передаются конструктору [`Task`](https://python-all.ru/3.16/library/asyncio-task.html#asyncio.Task) или пользовательской фабрике задач. (Подробнее см. [`set_task_factory()`](https://python-all.ru/3.16/library/asyncio-eventloop.html#asyncio.loop.set_task_factory).) Именованные аргументы `name` и `context` больше не являются особенными; теперь имя следует задавать с помощью именованного аргумента `name` фабрики, а `context` может быть `None`.594595 Это затрагивает следующие функции и методы: [`asyncio.create_task()`](https://python-all.ru/3.16/library/asyncio-task.html#asyncio.create_task), [`asyncio.loop.create_task()`](https://python-all.ru/3.16/library/asyncio-eventloop.html#asyncio.loop.create_task), [`asyncio.TaskGroup.create_task()`](https://python-all.ru/3.16/library/asyncio-task.html#asyncio.TaskGroup.create_task).596597 (Автор: Thomas Grainger в [gh-128307](https://python-all.ru/3.16/whatsnew/3.14.html).)598- Добавлены две новые вспомогательные функции для интроспекции и печати графа вызовов программы: [`capture_call_graph()`](https://python-all.ru/3.16/library/asyncio-graph.html#asyncio.capture_call_graph) и [`print_call_graph()`](https://python-all.ru/3.16/library/asyncio-graph.html#asyncio.print_call_graph). Подробнее см. [Возможности интроспекции asyncio](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-asyncio-introspection). (Авторы: Yury Selivanov, Pablo Galindo Salgado и Łukasz Langa в [gh-91048](https://python-all.ru/3.16/whatsnew/3.14.html).)599600### calendar601602- По умолчанию сегодняшняя дата выделяется цветом в текстовом выводе [командной строки](https://python-all.ru/3.16/library/calendar.html#calendar-cli) [`calendar`](https://python-all.ru/3.16/library/calendar.html#module-calendar). Это можно контролировать через [переменные окружения](https://python-all.ru/3.16/using/cmdline.html#using-on-controlling-color). (Автор: Hugo van Kemenade в [gh-128317](https://python-all.ru/3.16/whatsnew/3.14.html).)603604### concurrent.futures605606- Добавлен новый класс исполнителя [`InterpreterPoolExecutor`](https://python-all.ru/3.16/library/concurrent.futures.html#concurrent.futures.InterpreterPoolExecutor), который предоставляет Python-коду несколько интерпретаторов Python в одном процессе (субинтерпретаторы). Он использует пул независимых интерпретаторов Python для асинхронного выполнения вызовов.607608 Это отдельный модуль [`interpreters`](https://python-all.ru/3.16/library/concurrent.interpreters.html#module-concurrent.interpreters), представленный в [PEP 734](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-multiple-interpreters). (Автор: Eric Snow, [gh-124548](https://python-all.ru/3.16/whatsnew/3.14.html).)609610- On Unix platforms other than macOS, [‘forkserver’](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing-start-method-forkserver) is now the default [start method](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing-start-methods) for [`ProcessPoolExecutor`](https://python-all.ru/3.16/library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor) (replacing [‘fork’](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing-start-method-fork)). This change does not affect Windows or macOS, where [‘spawn’](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing-start-method-spawn) remains the default start method.611612 Если требуется несовместимый с потоками метод *fork*, его необходимо явно запросить, передав контекст мультипроцессинга *mp\_context* в [`ProcessPoolExecutor`](https://python-all.ru/3.16/library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor).613614 См. [ограничения forkserver](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing-programming-forkserver) для получения информации о различиях с методом *fork* и о том, как это изменение может повлиять на существующий код с изменяемыми глобальными общими переменными и/или общими объектами, которые не могут быть автоматически [`pickled`](https://python-all.ru/3.16/library/pickle.html#module-pickle).615616 (Предложено Gregory P. Smith в [gh-84559](https://python-all.ru/3.16/whatsnew/3.14.html).)617- Добавлены два новых метода в [`ProcessPoolExecutor`](https://python-all.ru/3.16/library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor): [`terminate_workers()`](https://python-all.ru/3.16/library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor.terminate_workers) и [`kill_workers()`](https://python-all.ru/3.16/library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor.kill_workers) для завершения или принудительного завершения всех живых рабочих процессов в заданном пуле. (Автор: Charles Machalow, [gh-130849](https://python-all.ru/3.16/whatsnew/3.14.html).)618- Добавлен необязательный параметр *buffersize* в [`Executor.map`](https://python-all.ru/3.16/library/concurrent.futures.html#concurrent.futures.Executor.map) для ограничения количества переданных задач, результаты которых ещё не получены. Если буфер заполнен, итерация по *итерируемым объектам* приостанавливается, пока результат не будет получен из буфера. (Авторы: Enzo Bonnal и Josh Rosenberg, [gh-74028](https://python-all.ru/3.16/whatsnew/3.14.html).)619620### configparser621622- `configparser` больше не будет записывать конфигурационные файлы, которые не может прочитать, для повышения безопасности. Попытка [`write()`](https://python-all.ru/3.16/library/configparser.html#configparser.ConfigParser.write) ключей, содержащих разделители или начинающихся с шаблона заголовка раздела, вызовет [`InvalidWriteError`](https://python-all.ru/3.16/library/configparser.html#configparser.InvalidWriteError). (Автор: Jacob Lincoln, [gh-129270](https://python-all.ru/3.16/whatsnew/3.14.html).)623624### contextvars625626- Поддержка протокола [менеджера контекста](https://python-all.ru/3.16/glossary.html#term-context-manager) для объектов [`Token`](https://python-all.ru/3.16/library/contextvars.html#contextvars.Token). (Автор: Andrew Svetlov, [gh-129889](https://python-all.ru/3.16/whatsnew/3.14.html).)627628### ctypes629630- Расположение [битовых полей](https://python-all.ru/3.16/library/ctypes.html#ctypes-bit-fields-in-structures-unions) в объектах [`Structure`](https://python-all.ru/3.16/library/ctypes.html#ctypes.Structure) и [`Union`](https://python-all.ru/3.16/library/ctypes.html#ctypes.Union) теперь точнее соответствует настройкам платформы по умолчанию (GCC/Clang или MSVC). В частности, поля больше не перекрываются. (Автор: Matthias Görgens, [gh-97702](https://python-all.ru/3.16/whatsnew/3.14.html).)631- Атрибут класса [`Structure._layout_`](https://python-all.ru/3.16/library/ctypes.html#ctypes.Structure._layout_) теперь можно задавать для сопоставления с нестандартным ABI. (Автор: Petr Viktorin, [gh-97702](https://python-all.ru/3.16/whatsnew/3.14.html).)632- Класс дескрипторов полей [`Structure`](https://python-all.ru/3.16/library/ctypes.html#ctypes.Structure)/[`Union`](https://python-all.ru/3.16/library/ctypes.html#ctypes.Union) теперь доступен как [`CField`](https://python-all.ru/3.16/library/ctypes.html#ctypes.CField) и содержит новые атрибуты для упрощения отладки и интроспекции. (Автор: Petr Viktorin, [gh-128715](https://python-all.ru/3.16/whatsnew/3.14.html).)633- В Windows исключение [`COMError`](https://python-all.ru/3.16/library/ctypes.html#ctypes.COMError) теперь является публичным. (Автор: Jun Komoda, [gh-126686](https://python-all.ru/3.16/whatsnew/3.14.html).)634- В Windows функция [`CopyComPointer()`](https://python-all.ru/3.16/library/ctypes.html#ctypes.CopyComPointer) теперь является публичной. (Автор: Jun Komoda, [gh-127275](https://python-all.ru/3.16/whatsnew/3.14.html).)635- Добавлена функция [`memoryview_at()`](https://python-all.ru/3.16/library/ctypes.html#ctypes.memoryview_at) для создания объекта [`memoryview`](https://python-all.ru/3.16/library/stdtypes.html#memoryview), ссылающегося на переданный указатель и длину. Она работает как [`ctypes.string_at()`](https://python-all.ru/3.16/library/ctypes.html#ctypes.string_at), но без копирования буфера, и обычно полезна при реализации чистых Python-колбэков, которым передаются буферы динамического размера. (Автор: Rian Hunter, [gh-112018](https://python-all.ru/3.16/whatsnew/3.14.html).)636- Комплексные типы [`c_float_complex`](https://python-all.ru/3.16/library/ctypes.html#ctypes.c_float_complex), [`c_double_complex`](https://python-all.ru/3.16/library/ctypes.html#ctypes.c_double_complex) и [`c_longdouble_complex`](https://python-all.ru/3.16/library/ctypes.html#ctypes.c_longdouble_complex) теперь доступны, если и компилятор, и библиотека `libffi` поддерживают комплексные типы C. (Автор: Sergey B Kirpichev, [gh-61103](https://python-all.ru/3.16/whatsnew/3.14.html).)637- Добавлена функция [`ctypes.util.dllist()`](https://python-all.ru/3.16/library/ctypes.html#ctypes.util.dllist) для вывода списка разделяемых библиотек, загруженных текущим процессом. (Автор: Brian Ward, [gh-119349](https://python-all.ru/3.16/whatsnew/3.14.html).)638- Кеш типов [`ctypes.POINTER()`](https://python-all.ru/3.16/library/ctypes.html#ctypes.POINTER) перемещён из глобального внутреннего кеша (`_pointer_type_cache`) в атрибут [`_CData.__pointer_type__`](https://python-all.ru/3.16/library/ctypes.html#ctypes._CData.__pointer_type__) соответствующих типов `ctypes`. Это предотвратит неограниченный рост кеша в некоторых ситуациях. (Автор: Sergey Miryanov, [gh-100926](https://python-all.ru/3.16/whatsnew/3.14.html).)639- Тип [`py_object`](https://python-all.ru/3.16/library/ctypes.html#ctypes.py_object) теперь поддерживает подписку, что делает его [обобщённым типом](https://python-all.ru/3.16/glossary.html#term-generic-type). (Автор: Brian Schubert, [gh-132168](https://python-all.ru/3.16/whatsnew/3.14.html).)640- `ctypes` теперь поддерживает [сборки со свободной многопоточностью](https://python-all.ru/3.16/glossary.html#term-free-threading). (Авторы: Kumar Aditya и Peter Bierma, [gh-127945](https://python-all.ru/3.16/whatsnew/3.14.html).)641642### curses643644- Добавлена функция [`assume_default_colors()`](https://python-all.ru/3.16/library/curses.html#curses.assume_default_colors) – улучшенная версия функции [`use_default_colors()`](https://python-all.ru/3.16/library/curses.html#curses.use_default_colors), которая позволяет изменять цветовую пару `0`. (Автор: Serhiy Storchaka, [gh-133139](https://python-all.ru/3.16/whatsnew/3.14.html).)645646### datetime647648- Добавлен метод [`strptime()`](https://python-all.ru/3.16/library/datetime.html#datetime.date.strptime) в классы [`datetime.date`](https://python-all.ru/3.16/library/datetime.html#datetime.date) и [`datetime.time`](https://python-all.ru/3.16/library/datetime.html#datetime.time). (Автор: Wannes Boeykens, [gh-41431](https://python-all.ru/3.16/whatsnew/3.14.html).)649650### decimal651652- Добавлен [`Decimal.from_number()`](https://python-all.ru/3.16/library/decimal.html#decimal.Decimal.from_number) как альтернативный конструктор для [`Decimal`](https://python-all.ru/3.16/library/decimal.html#decimal.Decimal). (Автор: Serhiy Storchaka, [gh-121798](https://python-all.ru/3.16/whatsnew/3.14.html).)653- Предоставлен [`IEEEContext()`](https://python-all.ru/3.16/library/decimal.html#decimal.IEEEContext) для поддержки создания контекстов, соответствующих десятичным форматам обмена IEEE 754 (2008). (Автор: Sergey B Kirpichev, [gh-53032](https://python-all.ru/3.16/whatsnew/3.14.html).)654655### difflib656657- Страницы сравнения с выделенными изменениями, создаваемые классом [`HtmlDiff`](https://python-all.ru/3.16/library/difflib.html#difflib.HtmlDiff), теперь поддерживают «тёмный режим». (Автор: Jiahao Li в [gh-129939](https://python-all.ru/3.16/whatsnew/3.14.html).)658659### dis660661- Добавлена поддержка отображения полной информации о местоположении в исходном коде для [`instructions`](https://python-all.ru/3.16/library/dis.html#dis.Instruction), а не только номера строки. Эта возможность добавлена в следующие интерфейсы через именованный аргумент *show\_positions*:662663 - [`dis.Bytecode`](https://python-all.ru/3.16/library/dis.html#dis.Bytecode)664 - [`dis.dis()`](https://python-all.ru/3.16/library/dis.html#dis.dis)665 - [`dis.distb()`](https://python-all.ru/3.16/library/dis.html#dis.distb)666 - [`dis.disassemble()`](https://python-all.ru/3.16/library/dis.html#dis.disassemble)667668 Эта возможность также доступна через [`dis --show-positions`](https://python-all.ru/3.16/library/dis.html#cmdoption-dis-P). (Автор: Bénédikt Tran в [gh-123165](https://python-all.ru/3.16/whatsnew/3.14.html).)669- Добавлена опция командной строки [`dis --specialized`](https://python-all.ru/3.16/library/dis.html#cmdoption-dis-S) для показа специализированного байт-кода. (Автор: Bénédikt Tran в [gh-127413](https://python-all.ru/3.16/whatsnew/3.14.html).)670671### errno672673- Добавлена константа кода ошибки [`EHWPOISON`](https://python-all.ru/3.16/library/errno.html#errno.EHWPOISON). (Автор: James Roy в [gh-126585](https://python-all.ru/3.16/whatsnew/3.14.html).)674675### faulthandler676677- Добавлена поддержка печати C-стека на системах, которые [поддерживают её](https://python-all.ru/3.16/library/faulthandler.html#c-stack-compatibility) с помощью новой функции [`dump_c_stack()`](https://python-all.ru/3.16/library/faulthandler.html#faulthandler.dump_c_stack) или через аргумент *c\_stack* в [`faulthandler.enable()`](https://python-all.ru/3.16/library/faulthandler.html#faulthandler.enable). (Автор: Peter Bierma в [gh-127604](https://python-all.ru/3.16/whatsnew/3.14.html).)678679### fnmatch680681- Добавлена функция [`filterfalse()`](https://python-all.ru/3.16/library/fnmatch.html#fnmatch.filterfalse), которая отклоняет имена, соответствующие заданному шаблону. (Автор: Bénédikt Tran в [gh-74598](https://python-all.ru/3.16/whatsnew/3.14.html).)682683### fractions684685- Объект [`Fraction`](https://python-all.ru/3.16/library/fractions.html#fractions.Fraction) теперь можно создать из любого объекта с методом `as_integer_ratio()`. (Автор: Serhiy Storchaka в [gh-82017](https://python-all.ru/3.16/whatsnew/3.14.html).)686- Добавлен [`Fraction.from_number()`](https://python-all.ru/3.16/library/fractions.html#fractions.Fraction.from_number) в качестве альтернативного конструктора для [`Fraction`](https://python-all.ru/3.16/library/fractions.html#fractions.Fraction). (Автор: Serhiy Storchaka в [gh-121797](https://python-all.ru/3.16/whatsnew/3.14.html).)687688### functools689690- Добавлен sentinel [`Placeholder`](https://python-all.ru/3.16/library/functools.html#functools.Placeholder). Его можно использовать с функциями [`partial()`](https://python-all.ru/3.16/library/functools.html#functools.partial) или [`partialmethod()`](https://python-all.ru/3.16/library/functools.html#functools.partialmethod), чтобы зарезервировать место для позиционных аргументов в возвращаемом [partial-объекте](https://python-all.ru/3.16/library/functools.html#partial-objects). (Автор: Dominykas Grigonis в [gh-119127](https://python-all.ru/3.16/whatsnew/3.14.html).)691- Разрешена передача параметра *initial* функции [`reduce()`](https://python-all.ru/3.16/library/functools.html#functools.reduce) в качестве именованного аргумента. (Автор: Sayandip Dutta в [gh-125916](https://python-all.ru/3.16/whatsnew/3.14.html).)692693### getopt694695- Добавлена поддержка опций с необязательными аргументами. (Автор: Serhiy Storchaka в [gh-126374](https://python-all.ru/3.16/whatsnew/3.14.html).)696- Добавлена поддержка возврата перемешанных опций и не-опционных аргументов в порядке их следования. (Автор: Serhiy Storchaka в [gh-126390](https://python-all.ru/3.16/whatsnew/3.14.html).)697698### getpass699700- Поддержка обратной связи с клавиатуры в функции [`getpass()`](https://python-all.ru/3.16/library/getpass.html#getpass.getpass) через необязательный именованный аргумент *echo\_char*. Символы-заполнители отображаются при вводе символа и удаляются при его удалении. (Автор: Semyon Moroz в [gh-77065](https://python-all.ru/3.16/whatsnew/3.14.html).)701702### graphlib703704- Разрешён повторный вызов [`TopologicalSorter.prepare()`](https://python-all.ru/3.16/library/graphlib.html#graphlib.TopologicalSorter.prepare), пока сортировка не началась. (Автор: Daniel Pope в [gh-130914](https://python-all.ru/3.16/whatsnew/3.14.html).)705706### heapq707708- Модуль `heapq` получил улучшенную поддержку работы с max-кучами с помощью следующих новых функций:709710 - [`heapify_max()`](https://python-all.ru/3.16/library/heapq.html#heapq.heapify_max)711 - [`heappush_max()`](https://python-all.ru/3.16/library/heapq.html#heapq.heappush_max)712 - [`heappop_max()`](https://python-all.ru/3.16/library/heapq.html#heapq.heappop_max)713 - [`heapreplace_max()`](https://python-all.ru/3.16/library/heapq.html#heapq.heapreplace_max)714 - [`heappushpop_max()`](https://python-all.ru/3.16/library/heapq.html#heapq.heappushpop_max)715716### hmac717718- Добавлена встроенная реализация HMAC ([**RFC 2104**](https://python-all.ru/3.16/whatsnew/3.14.html)) с использованием формально верифицированного кода из проекта [HACL\*](https://python-all.ru/3.16/whatsnew/3.14.html). Эта реализация используется как запасной вариант, когда реализация HMAC от OpenSSL недоступна. (Автор: Bénédikt Tran в [gh-99108](https://python-all.ru/3.16/whatsnew/3.14.html).)719720### http721722- Списки каталогов и страницы ошибок, создаваемые модулем [`http.server`](https://python-all.ru/3.16/library/http.server.html#module-http.server), позволяют браузеру применять свой тёмный режим по умолчанию. (Автор: Yorik Hansen в [gh-123430](https://python-all.ru/3.16/whatsnew/3.14.html).)723- Модуль [`http.server`](https://python-all.ru/3.16/library/http.server.html#module-http.server) теперь поддерживает обслуживание по HTTPS с помощью класса [`http.server.HTTPSServer`](https://python-all.ru/3.16/library/http.server.html#http.server.HTTPSServer). Эта функциональность доступна через интерфейс командной строки (`python -m http.server`) со следующими опциями:724725 - [`--tls-cert <path>`](https://python-all.ru/3.16/library/http.server.html#cmdoption-http.server-tls-cert): Путь к файлу сертификата TLS.726 - [`--tls-key <path>`](https://python-all.ru/3.16/library/http.server.html#cmdoption-http.server-tls-key): Необязательный путь к файлу закрытого ключа.727 - [`--tls-password-file <path>`](https://python-all.ru/3.16/library/http.server.html#cmdoption-http.server-tls-password-file): Необязательный путь к файлу пароля для закрытого ключа.728729 (Автор: Semyon Moroz в [gh-85162](https://python-all.ru/3.16/whatsnew/3.14.html).)730731### imaplib732733- Добавлен [`IMAP4.idle()`](https://python-all.ru/3.16/library/imaplib.html#imaplib.IMAP4.idle), реализующий команду IMAP4 `IDLE`, как определено в [**RFC 2177**](https://python-all.ru/3.16/whatsnew/3.14.html). (Автор: Forest в [gh-55454](https://python-all.ru/3.16/whatsnew/3.14.html).)734735### inspect736737- [`signature()`](https://python-all.ru/3.16/library/inspect.html#inspect.signature) принимает новый аргумент *annotation\_format* для управления [`annotationlib.Format`](https://python-all.ru/3.16/library/annotationlib.html#annotationlib.Format), используемым для представления аннотаций. (Автор: Jelle Zijlstra в [gh-101552](https://python-all.ru/3.16/whatsnew/3.14.html).)738- [`Signature.format()`](https://python-all.ru/3.16/library/inspect.html#inspect.Signature.format) принимает новый аргумент *unquote\_annotations*. Если true, строковые [аннотации](https://python-all.ru/3.16/glossary.html#term-annotation) отображаются без окружающих кавычек. (Автор: Jelle Zijlstra в [gh-101552](https://python-all.ru/3.16/whatsnew/3.14.html).)739- Добавлена функция [`ispackage()`](https://python-all.ru/3.16/library/inspect.html#inspect.ispackage) для определения, является ли объект [пакетом](https://python-all.ru/3.16/glossary.html#term-package) или нет. (Автор: Zhikang Yan в [gh-125634](https://python-all.ru/3.16/whatsnew/3.14.html).)740741### io742743- Чтение текста из неблокирующего потока данных с помощью `read` теперь может вызвать [`BlockingIOError`](https://python-all.ru/3.16/library/exceptions.html#BlockingIOError), если операция не может немедленно вернуть байты. (Автор: Giovanni Siragusa в [gh-109523](https://python-all.ru/3.16/whatsnew/3.14.html).)744- Добавлены протоколы [`Reader`](https://python-all.ru/3.16/library/io.html#io.Reader) и [`Writer`](https://python-all.ru/3.16/library/io.html#io.Writer) в качестве более простых альтернатив псевдопротоколам [`typing.IO`](https://python-all.ru/3.16/library/typing.html#typing.IO), [`typing.TextIO`](https://python-all.ru/3.16/library/typing.html#typing.TextIO) и [`typing.BinaryIO`](https://python-all.ru/3.16/library/typing.html#typing.BinaryIO). (Автор: Sebastian Rittau в [gh-127648](https://python-all.ru/3.16/whatsnew/3.14.html).)745746### json747748- Добавлены примечания к исключениям для ошибок сериализации JSON, которые позволяют определить источник ошибки. (Автор: Serhiy Storchaka в [gh-122163](https://python-all.ru/3.16/whatsnew/3.14.html).)749- Разрешено использовать модуль [`json`](https://python-all.ru/3.16/library/json.html#module-json) как скрипт с помощью ключа [`-m`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-m): **python -m json**. Теперь это предпочтительнее использования **python -m json.tool**, который [мягко устарел](https://python-all.ru/3.16/glossary.html#term-soft-deprecated). См. документацию [командного интерфейса JSON](https://python-all.ru/3.16/library/json.html#json-commandline). (Автор: Trey Hunner в [gh-122873](https://python-all.ru/3.16/whatsnew/3.14.html).)750- По умолчанию вывод [командного интерфейса JSON](https://python-all.ru/3.16/library/json.html#json-commandline) выделяется цветом. Это можно настроить с помощью [переменных окружения](https://python-all.ru/3.16/using/cmdline.html#using-on-controlling-color). (Автор: Tomas Roun в [gh-131952](https://python-all.ru/3.16/whatsnew/3.14.html).)751752### linecache753754- [`getline()`](https://python-all.ru/3.16/library/linecache.html#linecache.getline) теперь может получать исходный код для замороженных модулей. (Автор: Tian Gao в [gh-131638](https://python-all.ru/3.16/whatsnew/3.14.html).)755756### logging.handlers757758- Объекты [`QueueListener`](https://python-all.ru/3.16/library/logging.handlers.html#logging.handlers.QueueListener) теперь поддерживают протокол [менеджера контекста](https://python-all.ru/3.16/glossary.html#term-context-manager). (Автор: Charles Machalow в [gh-132106](https://python-all.ru/3.16/whatsnew/3.14.html).)759- [`QueueListener.start`](https://python-all.ru/3.16/library/logging.handlers.html#logging.handlers.QueueListener.start) теперь вызывает [`RuntimeError`](https://python-all.ru/3.16/library/exceptions.html#RuntimeError), если прослушиватель уже запущен. (Автор: Charles Machalow в [gh-132106](https://python-all.ru/3.16/whatsnew/3.14.html).)760761### math762763- Добавлены более подробные сообщения об ошибках для ошибок области определения в модуле. (Авторы: Charlie Zhao и Sergey B Kirpichev в [gh-101410](https://python-all.ru/3.16/whatsnew/3.14.html).)764765### mimetypes766767- Добавлен общедоступный [командный интерфейс](https://python-all.ru/3.16/library/mimetypes.html#mimetypes-cli) для модуля, вызываемый через **python -m mimetypes**. (Авторы: Oleg Iarygin и Hugo van Kemenade в [gh-93096](https://python-all.ru/3.16/whatsnew/3.14.html).)768- Добавлено несколько новых MIME-типов на основе RFC и общего использования:769770 Microsoft и [**RFC 8081**](https://python-all.ru/3.16/whatsnew/3.14.html) MIME-типы для шрифтов771772 - Встроенный OpenType: `application/vnd.ms-fontobject`773 - Макет OpenType (OTF): `font/otf`774 - TrueType: `font/ttf`775 - WOFF 1.0: `font/woff`776 - WOFF 2.0: `font/woff2`777778 [**RFC 9559**](https://python-all.ru/3.16/whatsnew/3.14.html) MIME-типы для структур аудиовизуальных контейнеров Matroska779780 - аудио без видео: `audio/matroska` (`.mka`)781 - видео: `video/matroska` (`.mkv`)782 - стереоскопическое видео: `video/matroska-3d` (`.mk3d`)783784 Изображения с RFC785786 - [**RFC 1494**](https://python-all.ru/3.16/whatsnew/3.14.html): группа CCITT 3 (`.g3`)787 - [**RFC 3362**](https://python-all.ru/3.16/whatsnew/3.14.html): факсимильная связь реального времени, T.38 (`.t38`)788 - [**RFC 3745**](https://python-all.ru/3.16/whatsnew/3.14.html): JPEG 2000 (`.jp2`), расширение (`.jpx`) и составной (`.jpm`)789 - [**RFC 3950**](https://python-all.ru/3.16/whatsnew/3.14.html): расширенный формат TIFF для факсов, TIFF-FX (`.tfx`)790 - [**RFC 4047**](https://python-all.ru/3.16/whatsnew/3.14.html): гибкая система передачи изображений (`.fits`)791 - [**RFC 7903**](https://python-all.ru/3.16/whatsnew/3.14.html): расширенный метафайл (`.emf`) и метафайл Windows (`.wmf`)792793 Прочие дополнения и изменения MIME-типов794795 - [**RFC 2361**](https://python-all.ru/3.16/whatsnew/3.14.html): изменение типа для `.avi` на `video/vnd.avi` и для `.wav` на `audio/vnd.wave`796 - [**RFC 4337**](https://python-all.ru/3.16/whatsnew/3.14.html): добавление MPEG-4 `audio/mp4` (`.m4a`)797 - [**RFC 5334**](https://python-all.ru/3.16/whatsnew/3.14.html): добавление медиа Ogg (`.oga`, `.ogg` и `.ogx`)798 - [**RFC 6713**](https://python-all.ru/3.16/whatsnew/3.14.html): добавление gzip `application/gzip` (`.gz`)799 - [**RFC 9639**](https://python-all.ru/3.16/whatsnew/3.14.html): добавление FLAC `audio/flac` (`.flac`)800 - [**RFC 9512**](https://python-all.ru/3.16/whatsnew/3.14.html) `application/yaml` MIME-тип для файлов YAML (`.yaml` и `.yml`)801 - Добавление `application/x-7z-compressed` 7z (`.7z`)802 - Добавление `application/vnd.android.package-archive` пакета Android (`.apk`) при нестрогой проверке803 - Добавление `application/x-debian-package` deb (`.deb`)804 - Добавление бинарного `model/gltf-binary` glTF (`.glb`)805 - Добавление `model/gltf+json` glTF в формате JSON/ASCII (`.gltf`)806 - Добавление `video/x-m4v` M4V (`.m4v`)807 - Добавление `application/x-httpd-php` PHP (`.php`)808 - Добавление `application/vnd.rar` RAR (`.rar`)809 - Добавление `application/x-rpm` RPM (`.rpm`)810 - Добавление `model/stl` STL (`.stl`)811 - Добавление `video/x-ms-wmv` Windows Media Video (`.wmv`)812 - Де-факто: добавление `audio/webm` WebM (`.weba`)813 - [ECMA-376](https://python-all.ru/3.16/whatsnew/3.14.html): добавление типов `.docx`, `.pptx` и `.xlsx`814 - [OASIS](https://python-all.ru/3.16/whatsnew/3.14.html): добавление типов OpenDocument `.odg`, `.odp`, `.ods` и `.odt`815 - [W3C](https://python-all.ru/3.16/whatsnew/3.14.html): Добавлен EPUB `application/epub+zip` (`.epub`)816817 (Предложено Sahil Prajapati и Hugo van Kemenade в [gh-84852](https://python-all.ru/3.16/whatsnew/3.14.html), Sasha “Nelie” Chernykh и Hugo van Kemenade в [gh-132056](https://python-all.ru/3.16/whatsnew/3.14.html), Hugo van Kemenade в [gh-89416](https://python-all.ru/3.16/whatsnew/3.14.html), [gh-85957](https://python-all.ru/3.16/whatsnew/3.14.html) и [gh-129965](https://python-all.ru/3.16/whatsnew/3.14.html).)818819### multiprocessing820821- На платформах Unix, отличных от macOS, [‘forkserver’](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing-start-method-forkserver) теперь используется как [метод запуска](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing-start-methods) по умолчанию (заменяя [‘fork’](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing-start-method-fork)). Это изменение не затрагивает Windows или macOS, где [‘spawn’](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing-start-method-spawn) остаётся методом запуска по умолчанию.822823 Если требуется несовместимый с потоками метод *fork*, следует явно запросить его через контекст из [`get_context()`](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing.get_context) (рекомендуется) или изменить значение по умолчанию через [`set_start_method()`](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing.set_start_method).824825 См. [ограничения forkserver](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing-programming-forkserver) для получения информации о различиях с методом *fork* и о том, как это изменение может повлиять на существующий код с изменяемыми глобальными общими переменными и/или общими объектами, которые не могут быть автоматически [`pickled`](https://python-all.ru/3.16/library/pickle.html#module-pickle).826827 (Предложено Gregory P. Smith в [gh-84559](https://python-all.ru/3.16/whatsnew/3.14.html).)828- Метод запуска `'forkserver'` в [`multiprocessing`](https://python-all.ru/3.16/library/multiprocessing.html#module-multiprocessing) теперь аутентифицирует свой управляющий сокет, чтобы не полагаться исключительно на права файловой системы для ограничения возможности других процессов заставить forkserver порождать рабочие процессы и выполнять код. (Предложено Gregory P. Smith для [gh-97514](https://python-all.ru/3.16/whatsnew/3.14.html).)829- [Объекты-прокси multiprocessing](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing-proxy-objects) для типов *list* и *dict* получили ранее упущенные методы:830831 > - `clear()` и `copy()` для прокси [`list`](https://python-all.ru/3.16/library/stdtypes.html#list)832 > - [`fromkeys()`](https://python-all.ru/3.16/library/stdtypes.html#dict.fromkeys), `reversed(d)`, `d | {}`, `{} | d`, `d |= {'b': 2}` для прокси [`dict`](https://python-all.ru/3.16/library/stdtypes.html#dict)833834 (Предложено Roy Hyunjin Han для [gh-103134](https://python-all.ru/3.16/whatsnew/3.14.html).)835- Добавлена поддержка общих объектов [`set`](https://python-all.ru/3.16/library/stdtypes.html#set) через [`SyncManager.set()`](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing.managers.SyncManager.set). Метод [`set()`](https://python-all.ru/3.16/library/stdtypes.html#set) в [`Manager()`](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing.Manager) теперь доступен. (Предложено Mingyu Park в [gh-129949](https://python-all.ru/3.16/whatsnew/3.14.html).)836- Добавлен [`interrupt()`](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing.Process.interrupt) в объекты [`multiprocessing.Process`](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing.Process), который завершает дочерний процесс отправкой [`SIGINT`](https://python-all.ru/3.16/library/signal.html#signal.SIGINT). Это позволяет предложениям [`finally`](https://python-all.ru/3.16/reference/compound_stmts.html#finally) выводить стек вызовов для завершённого процесса. (Предложено Artem Pulkin в [gh-131913](https://python-all.ru/3.16/whatsnew/3.14.html).)837838### operator839840- Добавлены [`is_none()`](https://python-all.ru/3.16/library/operator.html#operator.is_none) и [`is_not_none()`](https://python-all.ru/3.16/library/operator.html#operator.is_not_none) как пара функций, так что `operator.is_none(obj)` эквивалентно `obj is None`, а `operator.is_not_none(obj)` эквивалентно `obj is not None`. (Предложено Raymond Hettinger и Nico Mexis в [gh-115808](https://python-all.ru/3.16/whatsnew/3.14.html).)841842### os843844- Добавлена функция [`reload_environ()`](https://python-all.ru/3.16/library/os.html#os.reload_environ) для обновления [`os.environ`](https://python-all.ru/3.16/library/os.html#os.environ) и [`os.environb`](https://python-all.ru/3.16/library/os.html#os.environb) изменениями окружения, внесёнными [`os.putenv()`](https://python-all.ru/3.16/library/os.html#os.putenv), [`os.unsetenv()`](https://python-all.ru/3.16/library/os.html#os.unsetenv), или вне Python в том же процессе. (Предложено Victor Stinner в [gh-120057](https://python-all.ru/3.16/whatsnew/3.14.html).)845- Добавлены константы [`SCHED_DEADLINE`](https://python-all.ru/3.16/library/os.html#os.SCHED_DEADLINE) и [`SCHED_NORMAL`](https://python-all.ru/3.16/library/os.html#os.SCHED_NORMAL) в модуль `os`. (Предложено James Roy в [gh-127688](https://python-all.ru/3.16/whatsnew/3.14.html).)846- Добавлена функция [`readinto()`](https://python-all.ru/3.16/library/os.html#os.readinto) для чтения в [буферный объект](https://python-all.ru/3.16/c-api/buffer.html#bufferobjects) из файлового дескриптора. (Предложено Cody Maloney в [gh-129205](https://python-all.ru/3.16/whatsnew/3.14.html).)847848### os.path849850- Параметр *strict* в [`realpath()`](https://python-all.ru/3.16/library/os.path.html#os.path.realpath) принимает новое значение, [`ALLOW_MISSING`](https://python-all.ru/3.16/library/os.path.html#os.path.ALLOW_MISSING). При его использовании ошибки, отличные от [`FileNotFoundError`](https://python-all.ru/3.16/library/exceptions.html#FileNotFoundError), будут возбуждаться повторно; результирующий путь может отсутствовать, но будет свободен от символических ссылок. (Предложено Petr Viktorin для [**CVE 2025-4517**](https://python-all.ru/3.16/whatsnew/3.14.html).)851852### pathlib853854- Добавлены методы в [`pathlib.Path`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path) для рекурсивного копирования или перемещения файлов и каталогов:855856 - [`copy()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.copy) копирует файл или дерево каталогов в заданное место.857 - [`copy_into()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.copy_into) копирует *в* целевой каталог.858 - [`move()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.move) перемещает файл или дерево каталогов в заданное место.859 - [`move_into()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.move_into) перемещает *в* целевой каталог.860861 (Предложено Barney Gale в [gh-73991](https://python-all.ru/3.16/whatsnew/3.14.html).)862- Добавлен атрибут [`info`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.info), который хранит объект, реализующий новый протокол [`pathlib.types.PathInfo`](https://python-all.ru/3.16/library/pathlib.html#pathlib.types.PathInfo). Этот объект поддерживает запрос типа файла и внутреннее кэширование результатов [`stat()`](https://python-all.ru/3.16/library/os.html#os.stat). Объекты Path, созданные [`iterdir()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.iterdir), инициализируются информацией о типе файла, полученной при сканировании родительского каталога. (Предложено Barney Gale в [gh-125413](https://python-all.ru/3.16/whatsnew/3.14.html).)863864### pdb865866- Модуль [`pdb`](https://python-all.ru/3.16/library/pdb.html#module-pdb) теперь поддерживает удалённое подключение к работающему процессу Python с помощью новой опции командной строки [`-p PID`](https://python-all.ru/3.16/library/pdb.html#cmdoption-pdb-p):867868 ```sh869 python -m pdb -p 1234870 ```871872 Это позволит подключиться к процессу Python с указанным PID и даст возможность интерактивно его отлаживать. Обратите внимание, что из-за особенностей работы интерпретатора Python подключение к удалённому процессу, заблокированному в системном вызове или ожидающему ввода-вывода, сработает только после выполнения следующей инструкции байт-кода или получения процессом сигнала.873874 Эта функция использует [PEP 768](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-remote-debugging) и новую функцию [`sys.remote_exec()`](https://python-all.ru/3.16/library/sys.html#sys.remote_exec) для подключения к удалённому процессу и отправки ему команд PDB.875876 (Авторы: Matt Wozniski и Pablo Galindo, [gh-131591](https://python-all.ru/3.16/whatsnew/3.14.html).)877- Жёстко заданные точки останова ([`breakpoint()`](https://python-all.ru/3.16/library/functions.html#breakpoint) и [`set_trace()`](https://python-all.ru/3.16/library/pdb.html#pdb.set_trace)) теперь повторно используют последний экземпляр [`Pdb`](https://python-all.ru/3.16/library/pdb.html#pdb.Pdb), который вызывает [`set_trace()`](https://python-all.ru/3.16/library/pdb.html#pdb.Pdb.set_trace), вместо создания нового каждый раз. В результате все данные, специфичные для экземпляра, такие как [`display`](https://python-all.ru/3.16/library/pdb.html#pdbcommand-display) и [`commands`](https://python-all.ru/3.16/library/pdb.html#pdbcommand-commands), сохраняются между жёстко заданными точками останова. (Автор: Tian Gao, [gh-121450](https://python-all.ru/3.16/whatsnew/3.14.html).)878- Добавлен новый аргумент *mode* в [`pdb.Pdb`](https://python-all.ru/3.16/library/pdb.html#pdb.Pdb). Команда `restart` отключается, когда [`pdb`](https://python-all.ru/3.16/library/pdb.html#module-pdb) находится в режиме `inline`. (Автор: Tian Gao, [gh-123757](https://python-all.ru/3.16/whatsnew/3.14.html).)879- При попытке выйти из [`pdb`](https://python-all.ru/3.16/library/pdb.html#module-pdb) в режиме `inline` будет показан запрос подтверждения. `y`, `Y`, `<Enter>` или `EOF` подтвердят выход и вызовут [`sys.exit()`](https://python-all.ru/3.16/library/sys.html#sys.exit) вместо возбуждения [`bdb.BdbQuit`](https://python-all.ru/3.16/library/bdb.html#bdb.BdbQuit). (Автор: Tian Gao, [gh-124704](https://python-all.ru/3.16/whatsnew/3.14.html).)880- Встроенные точки останова, такие как [`breakpoint()`](https://python-all.ru/3.16/library/functions.html#breakpoint) или [`pdb.set_trace()`](https://python-all.ru/3.16/library/pdb.html#pdb.set_trace), всегда будут останавливать программу в вызывающем фрейме, игнорируя шаблон `skip` (если он есть). (Автор: Tian Gao, [gh-130493](https://python-all.ru/3.16/whatsnew/3.14.html).)881- `<tab>` в начале строки в многострочном вводе [`pdb`](https://python-all.ru/3.16/library/pdb.html#module-pdb) теперь будет заполнять отступ в 4 пробела вместо вставки символа `\t`. (Автор: Tian Gao, [gh-130471](https://python-all.ru/3.16/whatsnew/3.14.html).)882- Автоматический отступ введён в многострочном вводе [`pdb`](https://python-all.ru/3.16/library/pdb.html#module-pdb). Он либо сохраняет отступ последней строки, либо вставляет отступ в 4 пробела при обнаружении нового блока кода. (Автор: Tian Gao, [gh-133350](https://python-all.ru/3.16/whatsnew/3.14.html).)883- Добавлен `$_asynctask` для доступа к текущей задаче asyncio, если применимо. (Автор: Tian Gao, [gh-124367](https://python-all.ru/3.16/whatsnew/3.14.html).)884- Добавлен [`pdb.set_trace_async()`](https://python-all.ru/3.16/library/pdb.html#pdb.set_trace_async) для поддержки отладки корутин asyncio. Операторы [`await`](https://python-all.ru/3.16/reference/expressions.html#await) поддерживаются этой функцией. (Автор: Tian Gao, [gh-132576](https://python-all.ru/3.16/whatsnew/3.14.html).)885- Исходный код, отображаемый в [`pdb`](https://python-all.ru/3.16/library/pdb.html#module-pdb), будет подсвечиваться синтаксисом. Эту возможность можно контролировать теми же методами, что и в стандартной оболочке [interactive](https://python-all.ru/3.16/glossary.html#term-interactive), в дополнение к недавно добавленному аргументу `colorize` функции [`pdb.Pdb`](https://python-all.ru/3.16/library/pdb.html#pdb.Pdb). (Авторы: Tian Gao и Łukasz Langa, [gh-133355](https://python-all.ru/3.16/whatsnew/3.14.html).)886887### pickle888889- Установить версию протокола по умолчанию для модуля [`pickle`](https://python-all.ru/3.16/library/pickle.html#module-pickle) равной 5. Подробнее см. [протоколы pickle](https://python-all.ru/3.16/library/pickle.html#pickle-protocols).890- Добавлены примечания к исключениям для ошибок сериализации pickle, позволяющие идентифицировать источник ошибки. (Автор: Serhiy Storchaka, [gh-122213](https://python-all.ru/3.16/whatsnew/3.14.html).)891892### platform893894- Добавлена [`invalidate_caches()`](https://python-all.ru/3.16/library/platform.html#platform.invalidate_caches), функция для инвалидации кэшированных результатов в модуле `platform`. (Автор: Bénédikt Tran, [gh-122549](https://python-all.ru/3.16/whatsnew/3.14.html).)895896### pydoc897898- [Аннотации](https://python-all.ru/3.16/glossary.html#term-annotation) в выводе help теперь обычно отображаются в формате, более близком к исходному коду. (Автор: Jelle Zijlstra, [gh-101552](https://python-all.ru/3.16/whatsnew/3.14.html).)899900### re901902- Поддержка `\z` как синонима `\Z` в [`regular expressions`](https://python-all.ru/3.16/library/re.html#module-re). Во многих других движках регулярных выражений он интерпретируется однозначно, в отличие от `\Z`, поведение которого незначительно отличается. (Автор: Serhiy Storchaka, [gh-133306](https://python-all.ru/3.16/whatsnew/3.14.html).)903- `\B` в [`regular expression`](https://python-all.ru/3.16/library/re.html#module-re) теперь соответствует пустой входной строке, то есть теперь он всегда является противоположностью `\b`. (Автор: Serhiy Storchaka, [gh-124130](https://python-all.ru/3.16/whatsnew/3.14.html).)904905### socket906907- Улучшена и исправлена поддержка Bluetooth-сокетов.908909 - Исправлена поддержка Bluetooth-сокетов в NetBSD и DragonFly BSD. (Автор: Serhiy Storchaka, [gh-132429](https://python-all.ru/3.16/whatsnew/3.14.html).)910 - Исправлена поддержка [`BTPROTO_HCI`](https://python-all.ru/3.16/library/socket.html#socket.BTPROTO_HCI) в FreeBSD. (Автор: Victor Stinner, [gh-111178](https://python-all.ru/3.16/whatsnew/3.14.html).)911 - Добавлена поддержка [`BTPROTO_SCO`](https://python-all.ru/3.16/library/socket.html#socket.BTPROTO_SCO) в FreeBSD. (Автор: Serhiy Storchaka, [gh-85302](https://python-all.ru/3.16/whatsnew/3.14.html).)912 - Добавлена поддержка *cid* и *bdaddr\_type* в адресе для [`BTPROTO_L2CAP`](https://python-all.ru/3.16/library/socket.html#socket.BTPROTO_L2CAP) в FreeBSD. (Автор: Serhiy Storchaka, [gh-132429](https://python-all.ru/3.16/whatsnew/3.14.html).)913 - Добавлена поддержка *channel* в адресе для [`BTPROTO_HCI`](https://python-all.ru/3.16/library/socket.html#socket.BTPROTO_HCI) в Linux. (Автор: Serhiy Storchaka, [gh-70145](https://python-all.ru/3.16/whatsnew/3.14.html).)914 - Принимать целое число в качестве адреса для [`BTPROTO_HCI`](https://python-all.ru/3.16/library/socket.html#socket.BTPROTO_HCI) в Linux. (Автор: Serhiy Storchaka, [gh-132099](https://python-all.ru/3.16/whatsnew/3.14.html).)915 - Возвращать *cid* в [`getsockname()`](https://python-all.ru/3.16/library/socket.html#socket.socket.getsockname) для [`BTPROTO_L2CAP`](https://python-all.ru/3.16/library/socket.html#socket.BTPROTO_L2CAP). (Автор: Serhiy Storchaka, [gh-132429](https://python-all.ru/3.16/whatsnew/3.14.html).)916 - Добавлено много новых констант. (Автор: Serhiy Storchaka, [gh-132734](https://python-all.ru/3.16/whatsnew/3.14.html).)917918### ssl919920- Указывает с помощью логического значения [`HAS_PHA`](https://python-all.ru/3.16/library/ssl.html#ssl.HAS_PHA), поддерживает ли модуль `ssl` аутентификацию клиента после рукопожатия (PHA) для TLSv1.3. (Вклад Will Childs-Klein в [gh-128036](https://python-all.ru/3.16/whatsnew/3.14.html).)921922### struct923924- Поддерживает типы C float complex и double complex в модуле [`struct`](https://python-all.ru/3.16/library/struct.html#module-struct) (символы форматирования `'F'` и `'D'` соответственно). (Вклад Sergey B Kirpichev в [gh-121249](https://python-all.ru/3.16/whatsnew/3.14.html).)925926### symtable927928- Предоставляет следующие методы [`Symbol`](https://python-all.ru/3.16/library/symtable.html#symtable.Symbol):929930 - [`is_comp_cell()`](https://python-all.ru/3.16/library/symtable.html#symtable.Symbol.is_comp_cell)931 - [`is_comp_iter()`](https://python-all.ru/3.16/library/symtable.html#symtable.Symbol.is_comp_iter)932 - [`is_free_class()`](https://python-all.ru/3.16/library/symtable.html#symtable.Symbol.is_free_class)933934 (Вклад Bénédikt Tran в [gh-120029](https://python-all.ru/3.16/whatsnew/3.14.html).)935936### sys937938- Ранее недокументированная специальная функция [`sys.getobjects()`](https://python-all.ru/3.16/library/sys.html#sys.getobjects), которая существует только в специализированных сборках Python, теперь может возвращать объекты из других интерпретаторов, а не из того, в котором она вызвана. (Вклад Eric Snow в [gh-125286](https://python-all.ru/3.16/whatsnew/3.14.html).)939- Добавлена [`sys._is_immortal()`](https://python-all.ru/3.16/library/sys.html#sys._is_immortal) для определения того, является ли объект [бессмертным](https://python-all.ru/3.16/glossary.html#term-immortal). (Вклад Peter Bierma в [gh-128509](https://python-all.ru/3.16/whatsnew/3.14.html).)940- На FreeBSD [`sys.platform`](https://python-all.ru/3.16/library/sys.html#sys.platform) больше не содержит номер основной версии. Оно всегда равно `'freebsd'`, а не `'freebsd13'` или `'freebsd14'`. (Вклад Michael Osipov в [gh-129393](https://python-all.ru/3.16/whatsnew/3.14.html).)941- Вызывает [`DeprecationWarning`](https://python-all.ru/3.16/library/exceptions.html#DeprecationWarning) для [`sys._clear_type_cache()`](https://python-all.ru/3.16/library/sys.html#sys._clear_type_cache). Эта функция была объявлена устаревшей в Python 3.13, но не вызывала предупреждение времени выполнения.942- Добавлен [`sys.remote_exec()`](https://python-all.ru/3.16/library/sys.html#sys.remote_exec) для реализации нового интерфейса внешнего отладчика. См. [PEP 768](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-remote-debugging) для подробностей. (Вклад Pablo Galindo Salgado, Matt Wozniski и Ivona Stojanovic в [gh-131591](https://python-all.ru/3.16/whatsnew/3.14.html).)943- Добавлено пространство имён [`sys._jit`](https://python-all.ru/3.16/library/sys.html#sys._jit), содержащее утилиты для интроспекции JIT-компиляции. (Вклад Brandt Bucher в [gh-133231](https://python-all.ru/3.16/whatsnew/3.14.html).)944945### sys.monitoring946947- Добавлены два новых события мониторинга: [`BRANCH_LEFT`](https://python-all.ru/3.16/library/sys.monitoring.html#monitoring-event-BRANCH_LEFT) и [`BRANCH_RIGHT`](https://python-all.ru/3.16/library/sys.monitoring.html#monitoring-event-BRANCH_RIGHT). Они заменяют и объявляют устаревшим событие `BRANCH`. (Вклад Mark Shannon в [gh-122548](https://python-all.ru/3.16/whatsnew/3.14.html).)948949### sysconfig950951- Добавлен ключ `ABIFLAGS` в [`get_config_vars()`](https://python-all.ru/3.16/library/sysconfig.html#sysconfig.get_config_vars) на Windows. (Вклад Xuehai Pan в [gh-131799](https://python-all.ru/3.16/whatsnew/3.14.html).)952953### tarfile954955- [`data_filter()`](https://python-all.ru/3.16/library/tarfile.html#tarfile.data_filter) теперь нормализует цели символических ссылок для предотвращения атак с обходом пути. (Вклад Petr Viktorin в [gh-127987](https://python-all.ru/3.16/whatsnew/3.14.html) и [**CVE 2025-4138**](https://python-all.ru/3.16/whatsnew/3.14.html).)956- [`extractall()`](https://python-all.ru/3.16/library/tarfile.html#tarfile.TarFile.extractall) теперь пропускает исправление атрибутов каталога, если каталог был удалён или заменён файлом другого типа. (Вклад Petr Viktorin в [gh-127987](https://python-all.ru/3.16/whatsnew/3.14.html) и [**CVE 2024-12718**](https://python-all.ru/3.16/whatsnew/3.14.html).)957- [`extract()`](https://python-all.ru/3.16/library/tarfile.html#tarfile.TarFile.extract) и [`extractall()`](https://python-all.ru/3.16/library/tarfile.html#tarfile.TarFile.extractall) теперь (повторно) применяют фильтр извлечения при замене ссылки (жёсткой или символической) копией другого члена архива, а также при исправлении атрибутов каталога. Первое вызывает новое исключение [`LinkFallbackError`](https://python-all.ru/3.16/library/tarfile.html#tarfile.LinkFallbackError). (Вклад Petr Viktorin для [**CVE 2025-4330**](https://python-all.ru/3.16/whatsnew/3.14.html) и [**CVE 2024-12718**](https://python-all.ru/3.16/whatsnew/3.14.html).)958- [`extract()`](https://python-all.ru/3.16/library/tarfile.html#tarfile.TarFile.extract) и [`extractall()`](https://python-all.ru/3.16/library/tarfile.html#tarfile.TarFile.extractall) больше не извлекают отклонённые элементы, когда [`errorlevel()`](https://python-all.ru/3.16/library/tarfile.html#tarfile.TarFile.errorlevel) равно нулю. (Вклад Matt Prodani и Petr Viktorin в [gh-112887](https://python-all.ru/3.16/whatsnew/3.14.html) и [**CVE 2025-4435**](https://python-all.ru/3.16/whatsnew/3.14.html).)959960### threading961962- [`threading.Thread.start()`](https://python-all.ru/3.16/library/threading.html#threading.Thread.start) теперь устанавливает имя потока операционной системы в [`threading.Thread.name`](https://python-all.ru/3.16/library/threading.html#threading.Thread.name). (Вклад Victor Stinner в [gh-59705](https://python-all.ru/3.16/whatsnew/3.14.html).)963964### tkinter965966- Методы [`tkinter`](https://python-all.ru/3.16/library/tkinter.html#module-tkinter) `after()` и `after_idle()` теперь принимают именованные аргументы. (Вклад Zhikang Yan в [gh-126899](https://python-all.ru/3.16/whatsnew/3.14.html).)967- Добавлена возможность указать имя для `tkinter.OptionMenu` и `tkinter.ttk.OptionMenu`. (Вклад Zhikang Yan в [gh-130482](https://python-all.ru/3.16/whatsnew/3.14.html).)968969### turtle970971- Добавлены контекстные менеджеры для [`turtle.fill()`](https://python-all.ru/3.16/library/turtle.html#turtle.fill), [`turtle.poly()`](https://python-all.ru/3.16/library/turtle.html#turtle.poly) и [`turtle.no_animation()`](https://python-all.ru/3.16/library/turtle.html#turtle.no_animation). (Вклад Marie Roald и Yngve Mardal Moe в [gh-126350](https://python-all.ru/3.16/whatsnew/3.14.html).)972973### types974975- [`types.UnionType`](https://python-all.ru/3.16/library/types.html#types.UnionType) теперь является псевдонимом для [`typing.Union`](https://python-all.ru/3.16/library/typing.html#typing.Union). См. [ниже](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-typing-union) для подробностей. (Вклад Jelle Zijlstra в [gh-105499](https://python-all.ru/3.16/whatsnew/3.14.html).)976977### typing978979- Типы [`types.UnionType`](https://python-all.ru/3.16/library/types.html#types.UnionType) и [`typing.Union`](https://python-all.ru/3.16/library/typing.html#typing.Union) теперь являются псевдонимами друг друга, то есть как объединения старого стиля (созданные с помощью `Union[int, str]`), так и нового стиля (`int | str`) теперь создают экземпляры одного и того же типа времени выполнения. Это унифицирует поведение двух синтаксисов, но приводит к некоторым различиям, которые могут повлиять на пользователей, анализирующих типы во время выполнения:980981 - Оба синтаксиса создания объединения теперь дают одинаковое строковое представление в [`repr()`](https://python-all.ru/3.16/library/functions.html#repr). Например, `repr(Union[int, str])` теперь возвращает `"int | str"` вместо `"typing.Union[int, str]"`.982 - Объединения, созданные старым синтаксисом, больше не кэшируются. Раньше многократный вызов `Union[int, str]` возвращал один и тот же объект (`Union[int, str] is Union[int, str]` было бы `True`), но теперь будет возвращено два разных объекта. Используйте `==` для сравнения объединений на равенство, а не `is`. Объединения нового стиля никогда так не кэшировались. Это изменение может увеличить потребление памяти для некоторых программ, использующих большое количество объединений, созданных подписыванием `typing.Union`. Однако несколько факторов компенсируют это: объединения, используемые в аннотациях, по умолчанию больше не вычисляются в Python 3.14 из-за [**PEP 649**](https://python-all.ru/3.16/whatsnew/3.14.html); экземпляр [`types.UnionType`](https://python-all.ru/3.16/library/types.html#types.UnionType) сам по себе намного меньше, чем объект, возвращаемый `Union[]` в предыдущих версиях Python; удаление кэша также экономит некоторое пространство. Поэтому маловероятно, что это изменение вызовет значительное увеличение использования памяти для большинства пользователей.983 - Ранее объединения старого стиля были реализованы с помощью закрытого класса `typing._UnionGenericAlias`. Этот класс больше не нужен для реализации, но сохранён для обратной совместимости; удаление запланировано на Python 3.17. Пользователям следует использовать документированные вспомогательные средства интроспекции, такие как [`get_origin()`](https://python-all.ru/3.16/library/typing.html#typing.get_origin) и [`typing.get_args()`](https://python-all.ru/3.16/library/typing.html#typing.get_args), вместо того чтобы полагаться на детали закрытой реализации.984 - Теперь можно использовать сам [`typing.Union`](https://python-all.ru/3.16/library/typing.html#typing.Union) в проверках [`isinstance()`](https://python-all.ru/3.16/library/functions.html#isinstance). Например, `isinstance(int | str, typing.Union)` вернёт `True`; ранее это вызывало [`TypeError`](https://python-all.ru/3.16/library/exceptions.html#TypeError).985 - Атрибут `__args__` объектов [`typing.Union`](https://python-all.ru/3.16/library/typing.html#typing.Union) больше не доступен для записи.986 - Больше невозможно устанавливать какие-либо атрибуты для объектов [`Union`](https://python-all.ru/3.16/library/typing.html#typing.Union). Ранее это работало только для dunder-атрибутов в предыдущих версиях, никогда не было задокументировано как работающее и во многих случаях было незаметно сломано.987988 (Автор: Jelle Zijlstra в [gh-105499](https://python-all.ru/3.16/whatsnew/3.14.html).)989- [`TypeAliasType`](https://python-all.ru/3.16/library/typing.html#typing.TypeAliasType) теперь поддерживает распаковку со звёздочкой.990991### unicodedata992993- База данных Unicode обновлена до версии 16.0.0.994995### unittest996997- Вывод [`unittest`](https://python-all.ru/3.16/library/unittest.html#module-unittest) теперь по умолчанию цветной. Это можно настроить с помощью [переменных окружения](https://python-all.ru/3.16/using/cmdline.html#using-on-controlling-color). (Автор: Hugo van Kemenade в [gh-127221](https://python-all.ru/3.16/whatsnew/3.14.html).)998- Обнаружение unittest снова поддерживает [пакет пространства имён](https://python-all.ru/3.16/glossary.html#term-namespace-package) в качестве начального каталога. Эта возможность была удалена в Python 3.11. (Автор: Jacob Walls в [gh-80958](https://python-all.ru/3.16/whatsnew/3.14.html).)999- В класс [`TestCase`](https://python-all.ru/3.16/library/unittest.html#unittest.TestCase) добавлен ряд новых методов, предоставляющих более специализированные проверки.10001001 - [`assertHasAttr()`](https://python-all.ru/3.16/library/unittest.html#unittest.TestCase.assertHasAttr) и [`assertNotHasAttr()`](https://python-all.ru/3.16/library/unittest.html#unittest.TestCase.assertNotHasAttr) проверяют, имеет ли объект определённый атрибут.1002 - [`assertIsSubclass()`](https://python-all.ru/3.16/library/unittest.html#unittest.TestCase.assertIsSubclass) и [`assertNotIsSubclass()`](https://python-all.ru/3.16/library/unittest.html#unittest.TestCase.assertNotIsSubclass) проверяют, является ли объект подклассом определённого класса или одного из классов из кортежа.1003 - [`assertStartsWith()`](https://python-all.ru/3.16/library/unittest.html#unittest.TestCase.assertStartsWith), [`assertNotStartsWith()`](https://python-all.ru/3.16/library/unittest.html#unittest.TestCase.assertNotStartsWith), [`assertEndsWith()`](https://python-all.ru/3.16/library/unittest.html#unittest.TestCase.assertEndsWith) и [`assertNotEndsWith()`](https://python-all.ru/3.16/library/unittest.html#unittest.TestCase.assertNotEndsWith) проверяют, начинается или заканчивается строка Unicode или байтовая строка на заданные строки.10041005 (Автор: Serhiy Storchaka в [gh-71339](https://python-all.ru/3.16/whatsnew/3.14.html).)10061007### urllib10081009- Обновлён алгоритм дайджест-аутентификации HTTP для [`urllib.request`](https://python-all.ru/3.16/library/urllib.request.html#module-urllib.request) за счёт поддержки дайджест-аутентификации SHA-256, как указано в [**RFC 7616**](https://python-all.ru/3.16/whatsnew/3.14.html). (Автор: Calvin Bui в [gh-128193](https://python-all.ru/3.16/whatsnew/3.14.html).)1010- Улучшены эргономика и соответствие стандартам при разборе и формировании URL-адресов `file:`.10111012 В [`url2pathname()`](https://python-all.ru/3.16/library/urllib.request.html#urllib.request.url2pathname):10131014 - Принимать полный URL, когда новый аргумент *require\_scheme* установлен в true.1015 - Отбрасывать компонент authority URL, если он совпадает с локальным именем хоста.1016 - Отбрасывать компонент authority URL, если он разрешается в локальный IP-адрес, когда новый аргумент *resolve\_host* установлен в true.1017 - Отбрасывать компоненты запроса (query) и фрагмента (fragment) URL.1018 - Возбуждать [`URLError`](https://python-all.ru/3.16/library/urllib.error.html#urllib.error.URLError), если authority URL не является локальным, за исключением Windows, где по-прежнему возвращается UNC-путь.10191020 В [`pathname2url()`](https://python-all.ru/3.16/library/urllib.request.html#urllib.request.pathname2url):10211022 - Возвращать полный URL, когда новый аргумент *add\_scheme* установлен в true.1023 - Включать пустой authority URL, когда путь начинается с косой черты. Например, путь `/etc/hosts` преобразуется в URL `///etc/hosts`.10241025 В Windows буквы дисков больше не преобразуются в верхний регистр, и `:` символы, не следующие за буквой диска, больше не вызывают исключение [`OSError`](https://python-all.ru/3.16/library/exceptions.html#OSError).10261027 (Предложено Barney Gale в [gh-125866](https://python-all.ru/3.16/whatsnew/3.14.html).)10281029### uuid10301031- Добавлена поддержка UUID версий 6, 7 и 8 через [`uuid6()`](https://python-all.ru/3.16/library/uuid.html#uuid.uuid6), [`uuid7()`](https://python-all.ru/3.16/library/uuid.html#uuid.uuid7) и [`uuid8()`](https://python-all.ru/3.16/library/uuid.html#uuid.uuid8) соответственно, как указано в [**RFC 9562**](https://python-all.ru/3.16/whatsnew/3.14.html). (Предложено Bénédikt Tran в [gh-89083](https://python-all.ru/3.16/whatsnew/3.14.html).)1032- [`NIL`](https://python-all.ru/3.16/library/uuid.html#uuid.NIL) и [`MAX`](https://python-all.ru/3.16/library/uuid.html#uuid.MAX) теперь доступны для представления форматов UUID Nil и Max, как определено в [**RFC 9562**](https://python-all.ru/3.16/whatsnew/3.14.html). (Предложено Nick Pope в [gh-128427](https://python-all.ru/3.16/whatsnew/3.14.html).)1033- Теперь можно генерировать несколько UUID одновременно в командной строке через [`python -m uuid --count`](https://python-all.ru/3.16/library/uuid.html#cmdoption-uuid-count). (Предложено Саймоном Легнером в [gh-131236](https://python-all.ru/3.16/whatsnew/3.14.html).)10341035### webbrowser10361037- Имена в переменной окружения `BROWSER` теперь могут ссылаться на уже зарегистрированные браузеры для модуля [`webbrowser`](https://python-all.ru/3.16/library/webbrowser.html#module-webbrowser), вместо того чтобы каждый раз создавать новую команду браузера.10381039 Это позволяет установить `BROWSER` в значение одного из поддерживаемых браузеров в macOS.10401041### zipfile10421043- Добавлен метод [`ZipInfo._for_archive`](https://python-all.ru/3.16/library/zipfile.html#zipfile.ZipInfo._for_archive) для разрешения подходящих значений по умолчанию для объекта [`ZipInfo`](https://python-all.ru/3.16/library/zipfile.html#zipfile.ZipInfo), используемого [`ZipFile.writestr`](https://python-all.ru/3.16/library/zipfile.html#zipfile.ZipFile.writestr). (Предложено Bénédikt Tran в [gh-123424](https://python-all.ru/3.16/whatsnew/3.14.html).)1044- [`ZipFile.writestr()`](https://python-all.ru/3.16/library/zipfile.html#zipfile.ZipFile.writestr) теперь учитывает переменную окружения `SOURCE_DATE_EPOCH` для лучшей поддержки воспроизводимых сборок. (Предложено Jiahao Li в [gh-91279](https://python-all.ru/3.16/whatsnew/3.14.html).)10451046## Оптимизации10471048- Время импорта нескольких модулей стандартной библиотеки было улучшено, включая [`annotationlib`](https://python-all.ru/3.16/library/annotationlib.html#module-annotationlib), [`ast`](https://python-all.ru/3.16/library/ast.html#module-ast), [`asyncio`](https://python-all.ru/3.16/library/asyncio.html#module-asyncio), [`base64`](https://python-all.ru/3.16/library/base64.html#module-base64), [`cmd`](https://python-all.ru/3.16/library/cmd.html#module-cmd), [`csv`](https://python-all.ru/3.16/library/csv.html#module-csv), [`gettext`](https://python-all.ru/3.16/library/gettext.html#module-gettext), [`importlib.util`](https://python-all.ru/3.16/library/importlib.html#module-importlib.util), [`locale`](https://python-all.ru/3.16/library/locale.html#module-locale), [`mimetypes`](https://python-all.ru/3.16/library/mimetypes.html#module-mimetypes), [`optparse`](https://python-all.ru/3.16/library/optparse.html#module-optparse), [`pickle`](https://python-all.ru/3.16/library/pickle.html#module-pickle), [`pprint`](https://python-all.ru/3.16/library/pprint.html#module-pprint), [`pstats`](https://python-all.ru/3.16/library/pstats.html#module-pstats), [`shlex`](https://python-all.ru/3.16/library/shlex.html#module-shlex), [`socket`](https://python-all.ru/3.16/library/socket.html#module-socket), [`string`](https://python-all.ru/3.16/library/string.html#module-string), [`subprocess`](https://python-all.ru/3.16/library/subprocess.html#module-subprocess), [`threading`](https://python-all.ru/3.16/library/threading.html#module-threading), [`tomllib`](https://python-all.ru/3.16/library/tomllib.html#module-tomllib), [`types`](https://python-all.ru/3.16/library/types.html#module-types) и [`zipfile`](https://python-all.ru/3.16/library/zipfile.html#module-zipfile).10491050 (Предложено Adam Turner, Bénédikt Tran, Chris Markiewicz, Eli Schwartz, Hugo van Kemenade, Jelle Zijlstra и другими в [gh-118761](https://python-all.ru/3.16/whatsnew/3.14.html).)1051- Интерпретатор теперь избегает некоторых внутренних изменений счётчика ссылок, когда это безопасно. Это может привести к тому, что [`sys.getrefcount()`](https://python-all.ru/3.16/library/sys.html#sys.getrefcount) и [`Py_REFCNT()`](https://python-all.ru/3.16/c-api/refcounting.html#c.Py_REFCNT) будут возвращать другие значения по сравнению с предыдущими версиями Python. См. [ниже](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-refcount) для подробностей.10521053### asyncio10541055- Результаты стандартных тестов производительности улучшились на 10–20% после внедрения нового двухсвязного списка для каждого потока для [`native tasks`](https://python-all.ru/3.16/library/asyncio-task.html#asyncio.Task), а также снижения потребления памяти. Это позволяет внешним инструментам интроспекции, таким как [python -m asyncio pstree](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-asyncio-introspection), интроспектировать граф вызовов задач asyncio, работающих во всех потоках. (Предложено Kumar Aditya в [gh-107803](https://python-all.ru/3.16/whatsnew/3.14.html).)1056- Модуль теперь имеет первоклассную поддержку [сборок со свободной многопоточностью](https://python-all.ru/3.16/glossary.html#term-free-threading). Это позволяет параллельно выполнять несколько циклов событий в разных потоках, масштабируясь линейно с количеством потоков. (Предложено Kumar Aditya в [gh-128002](https://python-all.ru/3.16/whatsnew/3.14.html).)10571058### base6410591060- [`b16decode()`](https://python-all.ru/3.16/library/base64.html#base64.b16decode) теперь работает до шести раз быстрее. (Предложено Bénédikt Tran, Chris Markiewicz и Adam Turner в [gh-118761](https://python-all.ru/3.16/whatsnew/3.14.html).)10611062### bdb10631064- Базовый отладчик теперь имеет бэкенд на основе [`sys.monitoring`](https://python-all.ru/3.16/library/sys.monitoring.html#module-sys.monitoring), который можно выбрать, передав `'monitoring'` новому параметру *backend* класса [`Bdb`](https://python-all.ru/3.16/library/bdb.html#bdb.Bdb). (Предложено Tian Gao в [gh-124533](https://python-all.ru/3.16/whatsnew/3.14.html).)10651066### difflib10671068- Функция [`IS_LINE_JUNK()`](https://python-all.ru/3.16/library/difflib.html#difflib.IS_LINE_JUNK) теперь работает до двух раз быстрее. (Предложено Adam Turner и Semyon Moroz в [gh-130167](https://python-all.ru/3.16/whatsnew/3.14.html).)10691070### gc10711072- **Начиная с Python 3.14.5:**10731074 Python 3.14.0–3.14.4 поставлялся с новым инкрементальным сборщиком мусора. Однако из-за ряда [сообщений](https://python-all.ru/3.16/whatsnew/3.14.html) о значительном давлении памяти в производственных средах был выполнен откат к поколенческому GC из Python 3.13. Это GC, используемый в Python 3.14.5 и новее.1075- **Ранее в Python 3.14.0–3.14.4:**10761077 Новый [инкрементальный сборщик мусора](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-incremental-gc) означает, что максимальное время пауз сокращается на порядок или более для больших куч.10781079 Из-за этой оптимизации значение результатов [`get_threshold()`](https://python-all.ru/3.16/library/gc.html#gc.get_threshold) и [`set_threshold()`](https://python-all.ru/3.16/library/gc.html#gc.set_threshold) изменилось, а также [`get_count()`](https://python-all.ru/3.16/library/gc.html#gc.get_count) и [`get_stats()`](https://python-all.ru/3.16/library/gc.html#gc.get_stats).10801081 - Для обратной совместимости [`get_threshold()`](https://python-all.ru/3.16/library/gc.html#gc.get_threshold) продолжает возвращать кортеж из трёх элементов. Первое значение – порог для молодых сборок, как и раньше; второе значение определяет скорость сканирования старой сборки (по умолчанию 10; большие значения означают, что старая сборка сканируется медленнее). Третье значение теперь не имеет смысла и всегда равно нулю.1082 - [`set_threshold()`](https://python-all.ru/3.16/library/gc.html#gc.set_threshold) теперь игнорирует любые элементы после второго.1083 - [`get_count()`](https://python-all.ru/3.16/library/gc.html#gc.get_count) и [`get_stats()`](https://python-all.ru/3.16/library/gc.html#gc.get_stats) по-прежнему возвращают tот же формат результатов. Единственное отличие в том, что вместо привязки результатов к молодому, стареющему и старому поколениям, результаты теперь относятся к молодому поколению и пространствам старения и сбора старого поколения.10841085 В итоге код, пытавшийся управлять поведением циклического сборщика мусора, может работать не совсем так, как задумывалось, но вряд ли причинит вред. Весь остальной код будет работать без проблем.10861087 (Автор: Mark Shannon в [gh-108362](https://python-all.ru/3.16/whatsnew/3.14.html).)10881089### io10901091- Открытие и чтение файлов теперь выполняет меньше системных вызовов. Чтение небольшого файла, кэшированного операционной системой, целиком выполняется до 15% быстрее. (Авторы: Cody Maloney и Victor Stinner в [gh-120754](https://python-all.ru/3.16/whatsnew/3.14.html) и [gh-90102](https://python-all.ru/3.16/whatsnew/3.14.html).)10921093### pathlib10941095- [`Path.read_bytes`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.read_bytes) теперь использует небуферизованный режим для открытия файлов, что позволяет читать их целиком на 9–17% быстрее. (Автор: Cody Maloney в [gh-120754](https://python-all.ru/3.16/whatsnew/3.14.html).)10961097### pdb10981099- [`pdb`](https://python-all.ru/3.16/library/pdb.html#module-pdb) теперь поддерживает два бэкенда, основанных на [`sys.settrace()`](https://python-all.ru/3.16/library/sys.html#sys.settrace) или [`sys.monitoring`](https://python-all.ru/3.16/library/sys.monitoring.html#module-sys.monitoring). Использование [интерфейса командной строки pdb](https://python-all.ru/3.16/library/pdb.html#pdb-cli) или [`breakpoint()`](https://python-all.ru/3.16/library/functions.html#breakpoint) всегда будет использовать бэкенд `sys.monitoring`. При явном создании экземпляра [`pdb.Pdb`](https://python-all.ru/3.16/library/pdb.html#pdb.Pdb) и его производных классов по умолчанию будет использоваться бэкенд `sys.settrace()`, который можно настроить. (Автор: Tian Gao в [gh-124533](https://python-all.ru/3.16/whatsnew/3.14.html).)11001101### textwrap11021103- Оптимизирована функция [`dedent()`](https://python-all.ru/3.16/library/textwrap.html#textwrap.dedent): производительность повышена в среднем в 2,4 раза, с большим приростом для больших входных данных, а также исправлена ошибка неполной нормализации пустых строк с пробельными символами, отличными от пробела и табуляции.11041105### uuid11061107- [`uuid3()`](https://python-all.ru/3.16/library/uuid.html#uuid.uuid3) и [`uuid5()`](https://python-all.ru/3.16/library/uuid.html#uuid.uuid5) теперь примерно на 40% быстрее для 16-байтовых имён и на 20% быстрее для 1024-байтовых. Производительность для более длинных имён осталась без изменений. (Автор: Bénédikt Tran в [gh-128150](https://python-all.ru/3.16/whatsnew/3.14.html).)1108- [`uuid4()`](https://python-all.ru/3.16/library/uuid.html#uuid.uuid4) теперь примерно на 30% быстрее. (Автор: Bénédikt Tran в [gh-128150](https://python-all.ru/3.16/whatsnew/3.14.html).)11091110### zlib11111112- В Windows в качестве реализации модуля [`zlib`](https://python-all.ru/3.16/library/zlib.html#module-zlib) в стандартных двоичных сборках теперь используется [zlib-ng](https://python-all.ru/3.16/whatsnew/3.14.html). Неизвестно о несовместимостях между `zlib-ng` и ранее использовавшейся реализацией `zlib`. Это должно привести к повышению производительности на всех уровнях сжатия.11131114 Стоит отметить, что `zlib.Z_BEST_SPEED` (`1`) может приводить к значительно меньшей степени сжатия, чем предыдущая реализация, одновременно значительно сокращая время сжатия.11151116 (Автор: Steve Dower в [gh-91349](https://python-all.ru/3.16/whatsnew/3.14.html).)11171118## Удалено11191120### argparse11211122- Удалены параметры *type*, *choices* и *metavar* у `BooleanOptionalAction`. Они устарели, начиная с Python 3.12. (Автор: Nikita Sobolev в [gh-118805](https://python-all.ru/3.16/whatsnew/3.14.html).)1123- Вызов [`add_argument_group()`](https://python-all.ru/3.16/library/argparse.html#argparse.ArgumentParser.add_argument_group) для группы аргументов теперь вызывает [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError). Аналогично, `add_argument_group()` или [`add_mutually_exclusive_group()`](https://python-all.ru/3.16/library/argparse.html#argparse.ArgumentParser.add_mutually_exclusive_group) для взаимоисключающей группы теперь вызывают `ValueError`. Такое «вложение» никогда не поддерживалось, часто работало некорректно и было случайно доступно через наследование. Эта функциональность устарела с Python 3.11. (Автор: Savannah Ostrowski в [gh-127186](https://python-all.ru/3.16/whatsnew/3.14.html).)11241125### ast11261127- Удалены следующие классы, которые были устаревшими псевдонимами [`Constant`](https://python-all.ru/3.16/library/ast.html#ast.Constant) начиная с Python 3.8 и выдавали предупреждения об устаревании с Python 3.12:11281129 - `Bytes`1130 - `Ellipsis`1131 - `NameConstant`1132 - `Num`1133 - `Str`11341135 В результате этих удалений пользовательские методы `visit_Num`, `visit_Str`, `visit_Bytes`, `visit_NameConstant` и `visit_Ellipsis` на пользовательских подклассах [`NodeVisitor`](https://python-all.ru/3.16/library/ast.html#ast.NodeVisitor) больше не будут вызываться, когда подкласс `NodeVisitor` обходит AST. Вместо этого определите метод `visit_Constant`.11361137 (Автор: Alex Waygood в [gh-119562](https://python-all.ru/3.16/whatsnew/3.14.html).)1138- Удалены следующие устаревшие свойства у [`ast.Constant`](https://python-all.ru/3.16/library/ast.html#ast.Constant), которые присутствовали для совместимости с удалёнными теперь классами AST:11391140 - `Constant.n`1141 - `Constant.s`11421143 Вместо этого используйте `Constant.value`. (Автор: Alex Waygood в [gh-119562](https://python-all.ru/3.16/whatsnew/3.14.html).)11441145### asyncio11461147- Удалены следующие классы, методы и функции, которые были устаревшими с Python 3.12:11481149 - `AbstractChildWatcher`1150 - `FastChildWatcher`1151 - `MultiLoopChildWatcher`1152 - `PidfdChildWatcher`1153 - `SafeChildWatcher`1154 - `ThreadedChildWatcher`1155 - `AbstractEventLoopPolicy.get_child_watcher()`1156 - `AbstractEventLoopPolicy.set_child_watcher()`1157 - `get_child_watcher()`1158 - `set_child_watcher()`11591160 (Автор: Kumar Aditya в [gh-120804](https://python-all.ru/3.16/whatsnew/3.14.html).)1161- [`asyncio.get_event_loop()`](https://python-all.ru/3.16/library/asyncio-eventloop.html#asyncio.get_event_loop) теперь вызывает [`RuntimeError`](https://python-all.ru/3.16/library/exceptions.html#RuntimeError) при отсутствии текущего цикла событий и больше не создаёт цикл событий неявно.11621163 (Автор: Kumar Aditya в [gh-126353](https://python-all.ru/3.16/whatsnew/3.14.html).)11641165 Есть несколько шаблонов, в которых используется [`asyncio.get_event_loop()`](https://python-all.ru/3.16/library/asyncio-eventloop.html#asyncio.get_event_loop); большинство из них можно заменить на [`asyncio.run()`](https://python-all.ru/3.16/library/asyncio-runner.html#asyncio.run).11661167 При запуске асинхронной функции достаточно использовать [`asyncio.run()`](https://python-all.ru/3.16/library/asyncio-runner.html#asyncio.run).11681169 До:11701171 ```python1172 async def main():1173 ...11741175 loop = asyncio.get_event_loop()1176 try:1177 loop.run_until_complete(main())1178 finally:1179 loop.close()1180 ```11811182 После:11831184 ```python1185 async def main():1186 ...11871188 asyncio.run(main())1189 ```11901191 Для запуска чего-либо, например сервера, прослушивающего сокет, и последующей бесконечной работы применяются [`asyncio.run()`](https://python-all.ru/3.16/library/asyncio-runner.html#asyncio.run) и [`asyncio.Event`](https://python-all.ru/3.16/library/asyncio-sync.html#asyncio.Event).11921193 До:11941195 ```python1196 def start_server(loop): ...11971198 loop = asyncio.get_event_loop()1199 try:1200 start_server(loop)1201 loop.run_forever()1202 finally:1203 loop.close()1204 ```12051206 После:12071208 ```python1209 def start_server(loop): ...12101211 async def main():1212 start_server(asyncio.get_running_loop())1213 await asyncio.Event().wait()12141215 asyncio.run(main())1216 ```12171218 Для запуска чего-либо в цикле событий с последующим выполнением блокирующего кода вокруг него применяется [`asyncio.Runner`](https://python-all.ru/3.16/library/asyncio-runner.html#asyncio.Runner).12191220 До:12211222 ```python1223 async def operation_one(): ...1224 def blocking_code(): ...1225 async def operation_two(): ...12261227 loop = asyncio.get_event_loop()1228 try:1229 loop.run_until_complete(operation_one())1230 blocking_code()1231 loop.run_until_complete(operation_two())1232 finally:1233 loop.close()1234 ```12351236 После:12371238 ```python1239 async def operation_one(): ...1240 def blocking_code(): ...1241 async def operation_two(): ...12421243 with asyncio.Runner() as runner:1244 runner.run(operation_one())1245 blocking_code()1246 runner.run(operation_two())1247 ```12481249### email12501251- Удалён параметр *isdst* у [`email.utils.localtime()`](https://python-all.ru/3.16/library/email.utils.html#email.utils.localtime), который был объявлен устаревшим и игнорируется начиная с Python 3.12. (Автор: Hugo van Kemenade в [gh-118798](https://python-all.ru/3.16/whatsnew/3.14.html).)12521253### importlib.abc12541255- Удалены устаревшие классы [`importlib.abc`](https://python-all.ru/3.16/library/importlib.html#module-importlib.abc):12561257 - `ResourceReader` (используйте [`TraversableResources`](https://python-all.ru/3.16/library/importlib.resources.abc.html#importlib.resources.abc.TraversableResources))1258 - `Traversable` (используйте [`Traversable`](https://python-all.ru/3.16/library/importlib.resources.abc.html#importlib.resources.abc.Traversable))1259 - `TraversableResources` (используйте [`TraversableResources`](https://python-all.ru/3.16/library/importlib.resources.abc.html#importlib.resources.abc.TraversableResources))12601261 (Авторы: Jason R. Coombs и Hugo van Kemenade в [gh-93963](https://python-all.ru/3.16/whatsnew/3.14.html).)12621263### itertools12641265- Удалена поддержка операций copy, deepcopy и pickle для итераторов [`itertools`](https://python-all.ru/3.16/library/itertools.html#module-itertools). Начиная с Python 3.12 они вызывают [`DeprecationWarning`](https://python-all.ru/3.16/library/exceptions.html#DeprecationWarning). (Автор: Raymond Hettinger в [gh-101588](https://python-all.ru/3.16/whatsnew/3.14.html).)12661267### pathlib12681269- Удалена поддержка передачи дополнительных именованных аргументов в [`Path`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path). В предыдущих версиях такие аргументы игнорировались. (Автор: Barney Gale в [gh-74033](https://python-all.ru/3.16/whatsnew/3.14.html).)1270- Удалена поддержка передачи дополнительных позиционных аргументов в [`PurePath.relative_to()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.PurePath.relative_to) и [`is_relative_to()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.PurePath.is_relative_to). В предыдущих версиях такие аргументы присоединялись к *other*. (Автор: Barney Gale в [gh-78707](https://python-all.ru/3.16/whatsnew/3.14.html).)12711272### pkgutil12731274- Удалены функции `get_loader()` и `find_loader()`, которые были объявлены устаревшими начиная с Python 3.12. (Автор: Bénédikt Tran в [gh-97850](https://python-all.ru/3.16/whatsnew/3.14.html).)12751276### pty12771278- Удалены функции `master_open()` и `slave_open()`, которые были объявлены устаревшими начиная с Python 3.12. Вместо них используйте [`pty.openpty()`](https://python-all.ru/3.16/library/pty.html#pty.openpty). (Автор: Nikita Sobolev в [gh-118824](https://python-all.ru/3.16/whatsnew/3.14.html).)12791280### sqlite312811282- Удалены `version` и `version_info` из модуля [`sqlite3`](https://python-all.ru/3.16/library/sqlite3.html#module-sqlite3); используйте [`sqlite_version`](https://python-all.ru/3.16/library/sqlite3.html#sqlite3.sqlite_version) и [`sqlite_version_info`](https://python-all.ru/3.16/library/sqlite3.html#sqlite3.sqlite_version_info) для получения фактического номера версии библиотеки SQLite среды выполнения. (Автор: Hugo van Kemenade в [gh-118924](https://python-all.ru/3.16/whatsnew/3.14.html).)1283- Передача последовательности параметров с именованными заполнителями теперь вызывает [`ProgrammingError`](https://python-all.ru/3.16/library/sqlite3.html#sqlite3.ProgrammingError); это поведение объявлено устаревшим начиная с Python 3.12. (Авторы: Erlend E. Aasland в [gh-118928](https://python-all.ru/3.16/whatsnew/3.14.html) и [gh-101693](https://python-all.ru/3.16/whatsnew/3.14.html).)12841285### urllib12861287- Удалён класс `Quoter` из [`urllib.parse`](https://python-all.ru/3.16/library/urllib.parse.html#module-urllib.parse), который устарел начиная с Python 3.11. (Предложено Никитой Соболевым в [gh-118827](https://python-all.ru/3.16/whatsnew/3.14.html).)1288- Из [`urllib.request`](https://python-all.ru/3.16/library/urllib.request.html#module-urllib.request) удалены классы `URLopener` и `FancyURLopener`, которые устарели начиная с Python 3.3.12891290 `myopener.open()` можно заменить на [`urlopen()`](https://python-all.ru/3.16/library/urllib.request.html#urllib.request.urlopen). `myopener.retrieve()` можно заменить на [`urlretrieve()`](https://python-all.ru/3.16/library/urllib.request.html#urllib.request.urlretrieve). Настройки классов-открывателей можно заменить, передав настраиваемые обработчики в [`build_opener()`](https://python-all.ru/3.16/library/urllib.request.html#urllib.request.build_opener). (Предложено Барни Гейлом в [gh-84850](https://python-all.ru/3.16/whatsnew/3.14.html).)12911292## Устарело12931294### Новые устаревания12951296- Передача комплексного числа в качестве аргумента *real* или *imag* в конструкторе [`complex()`](https://python-all.ru/3.16/library/functions.html#complex) теперь устарела; комплексные числа должны передаваться только как единственный позиционный аргумент. (Предложено Сергеем Сторчакой в [gh-109218](https://python-all.ru/3.16/whatsnew/3.14.html).)1297- [`argparse`](https://python-all.ru/3.16/library/argparse.html#module-argparse):12981299 - Передача недокументированного именованного аргумента *prefix\_chars* методу [`add_argument_group()`](https://python-all.ru/3.16/library/argparse.html#argparse.ArgumentParser.add_argument_group) теперь устарела. (Предложено Саванной Островски в [gh-125563](https://python-all.ru/3.16/whatsnew/3.14.html).)1300 - Устарел преобразователь типов [`argparse.FileType`](https://python-all.ru/3.16/library/argparse.html#argparse.FileType). Всё, что связано с управлением ресурсами, должно обрабатываться на последующих этапах, после разбора аргументов. (Предложено Сергеем Сторчакой в [gh-58032](https://python-all.ru/3.16/whatsnew/3.14.html).)1301- [`asyncio`](https://python-all.ru/3.16/library/asyncio.html#module-asyncio):13021303 - `asyncio.iscoroutinefunction()` теперь устарел и будет удалён в Python 3.16; используйте вместо него [`inspect.iscoroutinefunction()`](https://python-all.ru/3.16/library/inspect.html#inspect.iscoroutinefunction). (Предложено Цзюхао Ли и Кумаром Адитьей в [gh-122875](https://python-all.ru/3.16/whatsnew/3.14.html).)1304 - Система политик [`asyncio`](https://python-all.ru/3.16/library/asyncio.html#module-asyncio) устарела и будет удалена в Python 3.16. В частности, следующие классы и функции объявлены устаревшими:13051306 - `asyncio.AbstractEventLoopPolicy`1307 - `asyncio.DefaultEventLoopPolicy`1308 - `asyncio.WindowsSelectorEventLoopPolicy`1309 - `asyncio.WindowsProactorEventLoopPolicy`1310 - `asyncio.get_event_loop_policy()`1311 - `asyncio.set_event_loop_policy()`13121313 Пользователям следует использовать [`asyncio.run()`](https://python-all.ru/3.16/library/asyncio-runner.html#asyncio.run) или [`asyncio.Runner`](https://python-all.ru/3.16/library/asyncio-runner.html#asyncio.Runner) с аргументом *loop\_factory* для применения нужной реализации цикла событий.13141315 Например, чтобы использовать [`asyncio.SelectorEventLoop`](https://python-all.ru/3.16/library/asyncio-eventloop.html#asyncio.SelectorEventLoop) в Windows:13161317 ```python1318 import asyncio13191320 async def main():1321 ...13221323 asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)1324 ```13251326 (Предложено Kumar Aditya в [gh-127949](https://python-all.ru/3.16/whatsnew/3.14.html).)1327- [`codecs`](https://python-all.ru/3.16/library/codecs.html#module-codecs): Функция [`codecs.open()`](https://python-all.ru/3.16/library/codecs.html#codecs.open) теперь устарела и будет удалена в будущей версии Python. Используйте вместо неё [`open()`](https://python-all.ru/3.16/library/functions.html#open). (Предложено Инадой Наоки в [gh-133036](https://python-all.ru/3.16/whatsnew/3.14.html).)1328- [`ctypes`](https://python-all.ru/3.16/library/ctypes.html#module-ctypes):13291330 - На платформах, отличных от Windows, установка [`Structure._pack_`](https://python-all.ru/3.16/library/ctypes.html#ctypes.Structure._pack_) для использования совместимой с MSVC разметки памяти по умолчанию теперь устарела в пользу установки [`Structure._layout_`](https://python-all.ru/3.16/library/ctypes.html#ctypes.Structure._layout_) в `'ms'`, и будет удалена в Python 3.19. (Предложено Петром Викториным в [gh-131747](https://python-all.ru/3.16/whatsnew/3.14.html).)1331 - Вызов [`ctypes.POINTER()`](https://python-all.ru/3.16/library/ctypes.html#ctypes.POINTER) для строки теперь устарел. Используйте [неполные типы](https://python-all.ru/3.16/library/ctypes.html#ctypes-incomplete-types) для саморекурсивных структур. Кроме того, внутренний `ctypes._pointer_type_cache` устарел. Подробнее об обновлённой реализации см. в `ctypes.POINTER()`. (Предложено Сергеем Мяриановым в [gh-100926](https://python-all.ru/3.16/whatsnew/3.14.html).)1332- [`functools`](https://python-all.ru/3.16/library/functools.html#module-functools): Вызов реализации на Python для [`functools.reduce()`](https://python-all.ru/3.16/library/functools.html#functools.reduce) с *function* или *sequence* в качестве именованных аргументов теперь устарел; параметры станут только позиционными в Python 3.16. (Предложено Кириллом Подопригорой в [gh-121676](https://python-all.ru/3.16/whatsnew/3.14.html).)1333- [`logging`](https://python-all.ru/3.16/library/logging.html#module-logging): Поддержка пользовательских обработчиков логирования с аргументом *strm* теперь устарела и запланирована к удалению в Python 3.16. Вместо этого определяйте обработчики с аргументом *поток данных*. (Предложено Мариушем Фелисяком в [gh-115032](https://python-all.ru/3.16/whatsnew/3.14.html).)1334- [`mimetypes`](https://python-all.ru/3.16/library/mimetypes.html#module-mimetypes): Допустимые расширения – либо пустые, либо должны начинаться с ‘.’ для [`mimetypes.MimeTypes.add_type()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.MimeTypes.add_type). Расширения без точки объявлены устаревшими и будут вызывать [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError) в Python 3.16. (Предложено Хьюго ван Кеменаде в [gh-75223](https://python-all.ru/3.16/whatsnew/3.14.html).)1335- `nturl2path`: Этот модуль теперь устарел. Вместо него вызывайте [`urllib.request.url2pathname()`](https://python-all.ru/3.16/library/urllib.request.html#urllib.request.url2pathname) и [`pathname2url()`](https://python-all.ru/3.16/library/urllib.request.html#urllib.request.pathname2url). (Предложено Барни Гейлом в [gh-125866](https://python-all.ru/3.16/whatsnew/3.14.html).)1336- [`os`](https://python-all.ru/3.16/library/os.html#module-os): Функции [`os.popen()`](https://python-all.ru/3.16/library/os.html#os.popen) и [`os.spawn*`](https://python-all.ru/3.16/library/os.html#os.spawnl) теперь [мягко устарели](https://python-all.ru/3.16/glossary.html#term-soft-deprecated). Их не следует использовать для написания нового кода. Вместо них рекомендуется модуль [`subprocess`](https://python-all.ru/3.16/library/subprocess.html#module-subprocess). (Предложено Виктором Стиннером в [gh-120743](https://python-all.ru/3.16/whatsnew/3.14.html).)1337- [`pathlib`](https://python-all.ru/3.16/library/pathlib.html#module-pathlib): `pathlib.PurePath.as_uri()` теперь устарел и запланирован к удалению в Python 3.19. Используйте вместо него [`pathlib.Path.as_uri()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.as_uri). (Предложено Барни Гейлом в [gh-123599](https://python-all.ru/3.16/whatsnew/3.14.html).)1338- [`pdb`](https://python-all.ru/3.16/library/pdb.html#module-pdb): Незадокументированный атрибут `pdb.Pdb.curframe_locals` теперь является устаревшим свойством только для чтения, которое будет удалено в будущей версии Python. Низконакладный доступ к локальным переменным фрейма, добавленный в Python 3.13 с помощью [**PEP 667**](https://python-all.ru/3.16/whatsnew/3.14.html), означает, что кэш-ссылка на локальные переменные фрейма, ранее хранившаяся в этом атрибуте, больше не нужна. Производные отладчики должны обращаться к `pdb.Pdb.curframe.f_locals` напрямую в Python 3.13 и более поздних версиях. (Предложено Тианом Гао в [gh-124369](https://python-all.ru/3.16/whatsnew/3.14.html) и [gh-125951](https://python-all.ru/3.16/whatsnew/3.14.html).)1339- [`symtable`](https://python-all.ru/3.16/library/symtable.html#module-symtable): `symtable.Class.get_methods()` объявлен устаревшим из-за отсутствия интереса, запланирован к удалению в Python 3.16. (Предложено Бенедиктом Траном в [gh-119698](https://python-all.ru/3.16/whatsnew/3.14.html).)1340- [`tkinter`](https://python-all.ru/3.16/library/tkinter.html#module-tkinter): Методы `tkinter.Variable`: `trace_variable()`, `trace_vdelete()` и `trace_vinfo()` теперь устарели. Используйте вместо них `trace_add()`, `trace_remove()` и `trace_info()`. (Предложено Сергеем Сторчакой в [gh-120220](https://python-all.ru/3.16/whatsnew/3.14.html).)1341- [`urllib.parse`](https://python-all.ru/3.16/library/urllib.parse.html#module-urllib.parse): Принятие объектов с ложными значениями (например, `0` и `[]`), за исключением пустых строк, байтоподобных объектов и `None`, в [`parse_qsl()`](https://python-all.ru/3.16/library/urllib.parse.html#urllib.parse.parse_qsl) и [`parse_qs()`](https://python-all.ru/3.16/library/urllib.parse.html#urllib.parse.parse_qs) теперь устарело. (Предложено Сергеем Сторчакой в [gh-116897](https://python-all.ru/3.16/whatsnew/3.14.html).)13421343### Ожидается удаление в Python 3.1513441345- Система импорта:13461347 - Установка `__cached__` в модуле без установки [`__spec__.cached`](https://python-all.ru/3.16/library/importlib.html#importlib.machinery.ModuleSpec.cached) считается устаревшей. Начиная с Python 3.15 `__cached__` больше не будет устанавливаться или учитываться системой импорта или стандартной библиотекой. ([gh-97879](https://python-all.ru/3.16/whatsnew/3.14.html))1348- [`ctypes`](https://python-all.ru/3.16/library/ctypes.html#module-ctypes):13491350 - Незадокументированная функция `ctypes.SetPointerType()` считается устаревшей начиная с Python 3.13.1351- [`http.server`](https://python-all.ru/3.16/library/http.server.html#module-http.server):13521353 - Устаревшая и редко используемая `CGIHTTPRequestHandler` считается устаревшей начиная с Python 3.13. Прямой замены не существует. *Что угодно* лучше, чем CGI, для взаимодействия веб-сервера с обработчиком запросов.1354 - Флаг `--cgi` для **python -m http.server** интерфейса командной строки считается устаревшим начиная с Python 3.13.1355- [`importlib`](https://python-all.ru/3.16/library/importlib.html#module-importlib):13561357 - Метод `load_module()`: вместо него используйте `exec_module()`.1358- [`pathlib`](https://python-all.ru/3.16/library/pathlib.html#module-pathlib):13591360 - `.PurePath.is_reserved()` считается устаревшим начиная с Python 3.13. Используйте [`os.path.isreserved()`](https://python-all.ru/3.16/library/os.path.html#os.path.isreserved) для обнаружения зарезервированных путей в Windows.1361- [`platform`](https://python-all.ru/3.16/library/platform.html#module-platform):13621363 - `platform.java_ver()` считается устаревшим начиная с Python 3.13. Эта функция полезна только для поддержки Jython, имеет запутанный API и в значительной степени не тестировалась.1364- [`sysconfig`](https://python-all.ru/3.16/library/sysconfig.html#module-sysconfig):13651366 - Аргумент *check\_home* функции [`sysconfig.is_python_build()`](https://python-all.ru/3.16/library/sysconfig.html#sysconfig.is_python_build) считается устаревшим начиная с Python 3.12.1367- [`threading`](https://python-all.ru/3.16/library/threading.html#module-threading):13681369 - [`RLock()`](https://python-all.ru/3.16/library/threading.html#threading.RLock) не будет принимать аргументов в Python 3.15. Передача любых аргументов считается устаревшей начиная с Python 3.14, поскольку версия на Python не допускает никаких аргументов, но версия на C позволяет любое количество позиционных или именованных аргументов, игнорируя все аргументы.1370- [`types`](https://python-all.ru/3.16/library/types.html#module-types):13711372 - [`types.CodeType`](https://python-all.ru/3.16/library/types.html#types.CodeType): доступ к `codeobject.co_lnotab` был объявлен устаревшим в [**PEP 626**](https://python-all.ru/3.16/whatsnew/3.14.html) начиная с версии 3.10 и планировался к удалению в 3.12, но получил надлежащий [`DeprecationWarning`](https://python-all.ru/3.16/library/exceptions.html#DeprecationWarning) только в 3.12. Может быть удалён в 3.15. (Предложено Никитой Соболевым в [gh-101866](https://python-all.ru/3.16/whatsnew/3.14.html).)1373- [`typing`](https://python-all.ru/3.16/library/typing.html#module-typing):13741375 - Незадокументированный синтаксис именованных аргументов для создания классов [`NamedTuple`](https://python-all.ru/3.16/library/typing.html#typing.NamedTuple) (например, `Point = NamedTuple("Point", x=int, y=int)`) считается устаревшим начиная с Python 3.13. Вместо этого используйте синтаксис на основе классов или функциональный синтаксис.1376 - При использовании функционального синтаксиса [`TypedDict`](https://python-all.ru/3.16/library/typing.html#typing.TypedDict), отсутствие передачи значения параметру *поля* (`TD = TypedDict("TD")`) или передача `None` (`TD = TypedDict("TD", None)`) считается устаревшим начиная с Python 3.13. Используйте `class TD(TypedDict): pass` или `TD = TypedDict("TD", {})` для создания TypedDict без полей.1377 - Функция-декоратор `@typing.no_type_check_decorator` считается устаревшей начиная с Python 3.13. За восемь лет в модуле [`typing`](https://python-all.ru/3.16/library/typing.html#module-typing) она так и не была поддержана ни одним крупным средством проверки типов.1378- Модули `sre_compile`, `sre_constants` и `sre_parse`.1379- [`wave`](https://python-all.ru/3.16/library/wave.html#module-wave):13801381 - Методы `getmark()`, `setmark()` и `getmarkers()` классов [`Wave_read`](https://python-all.ru/3.16/library/wave.html#wave.Wave_read) и [`Wave_write`](https://python-all.ru/3.16/library/wave.html#wave.Wave_write) считаются устаревшими начиная с Python 3.13.1382- [`zipimport`](https://python-all.ru/3.16/library/zipimport.html#module-zipimport):13831384 - `zipimport.zipimporter.load_module()` считается устаревшим начиная с Python 3.10. Вместо него используйте [`exec_module()`](https://python-all.ru/3.16/library/zipimport.html#zipimport.zipimporter.exec_module). ([gh-125746](https://python-all.ru/3.16/whatsnew/3.14.html).)13851386### Запланировано к удалению в Python 3.1613871388- Система импорта:13891390 - Установка [`__loader__`](https://python-all.ru/3.16/reference/datamodel.html#module.__loader__) в модуле при отсутствии [`__spec__.loader`](https://python-all.ru/3.16/library/importlib.html#importlib.machinery.ModuleSpec.loader) устарела. В Python 3.16 `__loader__` перестанет устанавливаться или учитываться системой импорта или стандартной библиотекой.1391 - Установка [`__package__`](https://python-all.ru/3.16/reference/datamodel.html#module.__package__) в модуле при отсутствии [`__spec__.parent`](https://python-all.ru/3.16/library/importlib.html#importlib.machinery.ModuleSpec.parent) устарела. В Python 3.16 `__package__` перестанет устанавливаться или учитываться системой импорта или стандартной библиотекой. ([gh-97879](https://python-all.ru/3.16/whatsnew/3.14.html))1392- Встроенная копия `libmpdec`.1393- [`array`](https://python-all.ru/3.16/library/array.html#module-array):13941395 - Код формата `'u'` (`wchar_t`) устарел в документации начиная с Python 3.3 и во время выполнения начиная с Python 3.13. Используйте код формата `'w'` ([`Py_UCS4`](https://python-all.ru/3.16/c-api/unicode.html#c.Py_UCS4)) для символов Unicode.1396- [`asyncio`](https://python-all.ru/3.16/library/asyncio.html#module-asyncio):13971398 - `asyncio.iscoroutinefunction()` устарело и будет удалено в Python 3.16; используйте [`inspect.iscoroutinefunction()`](https://python-all.ru/3.16/library/inspect.html#inspect.iscoroutinefunction) вместо этого. (Предложено Jiahao Li и Kumar Aditya в [gh-122875](https://python-all.ru/3.16/whatsnew/3.14.html).)1399 - Система политик [`asyncio`](https://python-all.ru/3.16/library/asyncio.html#module-asyncio) устарела и будет удалена в Python 3.16. В частности, следующие классы и функции устарели:14001401 - `asyncio.AbstractEventLoopPolicy`1402 - `asyncio.DefaultEventLoopPolicy`1403 - `asyncio.WindowsSelectorEventLoopPolicy`1404 - `asyncio.WindowsProactorEventLoopPolicy`1405 - `asyncio.get_event_loop_policy()`1406 - `asyncio.set_event_loop_policy()`14071408 Для использования нужной реализации цикла событий следует применять [`asyncio.run()`](https://python-all.ru/3.16/library/asyncio-runner.html#asyncio.run) или [`asyncio.Runner`](https://python-all.ru/3.16/library/asyncio-runner.html#asyncio.Runner) с параметром *loop\_factory*.14091410 Например, чтобы использовать [`asyncio.SelectorEventLoop`](https://python-all.ru/3.16/library/asyncio-eventloop.html#asyncio.SelectorEventLoop) в Windows:14111412 ```python1413 import asyncio14141415 async def main():1416 ...14171418 asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)1419 ```14201421 (Предложено Kumar Aditya в [gh-127949](https://python-all.ru/3.16/whatsnew/3.14.html).)1422- [`builtins`](https://python-all.ru/3.16/library/builtins.html#module-builtins):14231424 - Поразрядная инверсия для булевых типов, `~True` или `~False` устарела начиная с Python 3.12, поскольку даёт неожиданные и неинтуитивные результаты (`-2` и `-1`). Используйте `not x` для логического отрицания булевого значения. В редких случаях, когда требуется поразрядная инверсия базового целого числа, явно преобразуйте в `int` (`~int(x)`).1425- [`functools`](https://python-all.ru/3.16/library/functools.html#module-functools):14261427 - Вызов реализации [`functools.reduce()`](https://python-all.ru/3.16/library/functools.html#functools.reduce) на Python с *function* или *sequence* в качестве именованных аргументов устарел начиная с Python 3.14.1428- [`logging`](https://python-all.ru/3.16/library/logging.html#module-logging):14291430 - Поддержка пользовательских обработчиков логирования с аргументом *strm* устарела и запланирована к удалению в Python 3.16. Вместо этого определяйте обработчики с аргументом *stream*. (Предложено Mariusz Felisiak в [gh-115032](https://python-all.ru/3.16/whatsnew/3.14.html).)1431- [`mimetypes`](https://python-all.ru/3.16/library/mimetypes.html#module-mimetypes):14321433 - Допустимые расширения начинаются с точки ‘.’ или пусты для [`mimetypes.MimeTypes.add_type()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.MimeTypes.add_type). Расширения без точки устарели и будут вызывать [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError) в Python 3.16. (Предложено Hugo van Kemenade в [gh-75223](https://python-all.ru/3.16/whatsnew/3.14.html).)1434- [`shutil`](https://python-all.ru/3.16/library/shutil.html#module-shutil):14351436 - Исключение `ExecError` устарело начиная с Python 3.14. Оно не используется ни одной функцией в `shutil` начиная с Python 3.4 и теперь является псевдонимом [`RuntimeError`](https://python-all.ru/3.16/library/exceptions.html#RuntimeError).1437- [`symtable`](https://python-all.ru/3.16/library/symtable.html#module-symtable):14381439 - Метод `symtable.Class.get_methods()` устарел начиная с Python 3.14.1440- [`sys`](https://python-all.ru/3.16/library/sys.html#module-sys):14411442 - Функция `_enablelegacywindowsfsencoding()` устарела начиная с Python 3.13. Используйте переменную окружения [`PYTHONLEGACYWINDOWSFSENCODING`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONLEGACYWINDOWSFSENCODING).1443- [`sysconfig`](https://python-all.ru/3.16/library/sysconfig.html#module-sysconfig):14441445 - Функция `sysconfig.expand_makefile_vars()` устарела начиная с Python 3.14. Используйте аргумент `vars` из [`sysconfig.get_paths()`](https://python-all.ru/3.16/library/sysconfig.html#sysconfig.get_paths).1446- [`tarfile`](https://python-all.ru/3.16/library/tarfile.html#module-tarfile):14471448 - Недокументированный и неиспользуемый атрибут `TarInfo.tarfile` устарел начиная с Python 3.13.14491450### Запланировано к удалению в Python 3.1714511452- [`datetime`](https://python-all.ru/3.16/library/datetime.html#module-datetime):14531454 - [`strptime()`](https://python-all.ru/3.16/library/datetime.html#datetime.datetime.strptime) вызовы со строкой формата, содержащей `%e` (день месяца) без указания года. Это объявлено устаревшим начиная с Python 3.15. (Автор: Stan Ulbrych в [gh-70647](https://python-all.ru/3.16/whatsnew/3.14.html).)1455- [`collections.abc`](https://python-all.ru/3.16/library/collections.abc.html#module-collections.abc):14561457 - [`collections.abc.ByteString`](https://python-all.ru/3.16/library/collections.abc.html#collections.abc.ByteString) запланирован к удалению в Python 3.17.14581459 Используйте `isinstance(obj, collections.abc.Buffer)` для проверки, реализует ли `obj` [протокол буфера](https://python-all.ru/3.16/c-api/buffer.html#bufferobjects) во время выполнения. Для использования в аннотациях типов используйте [`Buffer`](https://python-all.ru/3.16/library/collections.abc.html#collections.abc.Buffer) или объединение, которое явно указывает типы, поддерживаемые вашим кодом (например, `bytes | bytearray | memoryview`).14601461 `ByteString` изначально задумывался как абстрактный класс, который должен был служить супертипом как для [`bytes`](https://python-all.ru/3.16/library/stdtypes.html#bytes), так и для [`bytearray`](https://python-all.ru/3.16/library/stdtypes.html#bytearray). Однако, поскольку у ABC никогда не было методов, знание того, что объект является экземпляром `ByteString`, никогда не давало полезной информации об объекте. Другие распространённые типы буферов, такие как [`memoryview`](https://python-all.ru/3.16/library/stdtypes.html#memoryview), также никогда не рассматривались как подтипы `ByteString` (ни во время выполнения, ни статическими проверками типов).14621463 См. [**PEP 688**](https://python-all.ru/3.16/whatsnew/3.14.html) для получения подробностей. (Автор: Shantanu Jain в [gh-91896](https://python-all.ru/3.16/whatsnew/3.14.html).)1464- [`encodings`](https://python-all.ru/3.16/library/codecs.html#module-encodings):14651466 - Передача *кодировок*, не являющихся ASCII, в [`encodings.normalize_encoding()`](https://python-all.ru/3.16/library/codecs.html#encodings.normalize_encoding) объявлена устаревшей и запланирована к удалению в Python 3.17. (Автор: Stan Ulbrych в [gh-136702](https://python-all.ru/3.16/whatsnew/3.14.html).)1467- [`webbrowser`](https://python-all.ru/3.16/library/webbrowser.html#module-webbrowser):14681469 - `webbrowser.MacOSXOSAScript` объявлен устаревшим в пользу `webbrowser.MacOS`. ([gh-137586](https://python-all.ru/3.16/whatsnew/3.14.html))1470- [`typing`](https://python-all.ru/3.16/library/typing.html#module-typing):14711472 - До Python 3.14 старые объединения реализовывались с помощью приватного класса `typing._UnionGenericAlias`. Этот класс больше не нужен для реализации, но он сохранён для обратной совместимости, его удаление запланировано на Python 3.17. Пользователям следует использовать документированные вспомогательные средства интроспекции, такие как [`typing.get_origin()`](https://python-all.ru/3.16/library/typing.html#typing.get_origin) и [`typing.get_args()`](https://python-all.ru/3.16/library/typing.html#typing.get_args), вместо того чтобы полагаться на детали приватной реализации.1473 - [`typing.ByteString`](https://python-all.ru/3.16/library/typing.html#typing.ByteString), устаревший с Python 3.9, запланирован к удалению в Python 3.17.14741475 Используйте `isinstance(obj, collections.abc.Buffer)` для проверки, реализует ли `obj` [протокол буфера](https://python-all.ru/3.16/c-api/buffer.html#bufferobjects) во время выполнения. Для использования в аннотациях типов используйте [`Buffer`](https://python-all.ru/3.16/library/collections.abc.html#collections.abc.Buffer) или объединение, которое явно указывает типы, поддерживаемые вашим кодом (например, `bytes | bytearray | memoryview`).14761477 `ByteString` изначально задумывался как абстрактный класс, который должен был служить супертипом как для [`bytes`](https://python-all.ru/3.16/library/stdtypes.html#bytes), так и для [`bytearray`](https://python-all.ru/3.16/library/stdtypes.html#bytearray). Однако, поскольку у ABC никогда не было методов, знание того, что объект является экземпляром `ByteString`, никогда не давало полезной информации об объекте. Другие распространённые типы буферов, такие как [`memoryview`](https://python-all.ru/3.16/library/stdtypes.html#memoryview), также никогда не рассматривались как подтипы `ByteString` (ни во время выполнения, ни статическими проверками типов).14781479 См. [**PEP 688**](https://python-all.ru/3.16/whatsnew/3.14.html) для получения подробностей. (Автор: Shantanu Jain в [gh-91896](https://python-all.ru/3.16/whatsnew/3.14.html).)1480- [`tkinter`](https://python-all.ru/3.16/library/tkinter.html#module-tkinter):14811482 - Методы `tkinter.Variable`: `trace_variable()`, `trace()` (псевдоним `trace_variable()`), `trace_vdelete()` и `trace_vinfo()`, устаревшие с Python 3.14, запланированы к удалению в Python 3.17. Используйте `trace_add()`, `trace_remove()` и `trace_info()` вместо них. (Автор: Serhiy Storchaka в [gh-120220](https://python-all.ru/3.16/whatsnew/3.14.html).)14831484### Запланировано удаление в Python 3.1814851486- Больше не принимает логическое значение, если ожидается файловый дескриптор. (Автор: Serhiy Storchaka в [gh-82626](https://python-all.ru/3.16/whatsnew/3.14.html).)1487- [`decimal`](https://python-all.ru/3.16/library/decimal.html#module-decimal):14881489 - Нестандартный и недокументированный [`Decimal`](https://python-all.ru/3.16/library/decimal.html#decimal.Decimal) спецификатор формата `'N'`, который поддерживается только в реализации C модуля `decimal`, устарел с Python 3.13. (Автор: Serhiy Storchaka в [gh-89902](https://python-all.ru/3.16/whatsnew/3.14.html).)1490- Устаревшие элементы, определённые [**PEP 829**](https://python-all.ru/3.16/whatsnew/3.14.html):14911492 - Строки `import` в файлах `name.pth` молча игнорируются.14931494 (Вклад: Barry Warsaw в [gh-148641](https://python-all.ru/3.16/whatsnew/3.14.html).)14951496### Запланировано к удалению в Python 3.1914971498- [`ctypes`](https://python-all.ru/3.16/library/ctypes.html#module-ctypes):14991500 - Неявное переключение на совместимую с MSVC структуру путём установки [`_pack_`](https://python-all.ru/3.16/library/ctypes.html#ctypes.Structure._pack_) без [`_layout_`](https://python-all.ru/3.16/library/ctypes.html#ctypes.Structure._layout_) на платформах, отличных от Windows.1501- [`hashlib`](https://python-all.ru/3.16/library/hashlib.html#module-hashlib):15021503 - В конструкторах хеш-функций, таких как [`new()`](https://python-all.ru/3.16/library/hashlib.html#hashlib.new), или прямых конструкторах, названных по имени хеша, таких как [`md5()`](https://python-all.ru/3.16/library/hashlib.html#hashlib.md5) и [`sha256()`](https://python-all.ru/3.16/library/hashlib.html#hashlib.sha256), их необязательный параметр начальных данных мог также передаваться как именованный аргумент с именем `data=` или `string=` в различных реализациях `hashlib`.15041505 Поддержка имени именованного аргумента `string` теперь устарела и будет удалена в Python 3.19.15061507 До Python 3.13 именованный параметр `string` не поддерживался правильно в зависимости от реализации хеш-функций на стороне бэкенда. Предпочтительно передавать начальные данные как позиционный аргумент для максимальной обратной совместимости.1508- [`http.cookies`](https://python-all.ru/3.16/library/http.cookies.html#module-http.cookies):15091510 - [`http.cookies.Morsel.js_output()`](https://python-all.ru/3.16/library/http.cookies.html#http.cookies.Morsel.js_output) устарело и будет удалено в Python 3.19.1511 - [`http.cookies.BaseCookie.js_output()`](https://python-all.ru/3.16/library/http.cookies.html#http.cookies.BaseCookie.js_output) устарело и будет удалено в Python 3.19.1512- [`imaplib`](https://python-all.ru/3.16/library/imaplib.html#module-imaplib):15131514 - Изменение [`IMAP4.file`](https://python-all.ru/3.16/library/imaplib.html#imaplib.IMAP4.file) теперь устарело и будет удалено в Python 3.19. Это свойство теперь не используется, и изменение его значения не приводит к автоматическому закрытию текущего файла.15151516 До Python 3.14 это свойство использовалось для реализации соответствующих методов `read()` и `readline()` для [`IMAP4`](https://python-all.ru/3.16/library/imaplib.html#imaplib.IMAP4), но с тех пор это уже не так.15171518### Ожидается удаление в Python 3.2015191520- Вызов метода `__new__()` объекта [`struct.Struct`](https://python-all.ru/3.16/library/struct.html#struct.Struct) без аргумента *format* устарел и будет удалён в Python 3.20. Вызов [`__init__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__init__) метода для инициализированных объектов `Struct` устарел и будет удалён в Python 3.20.15211522 (Вклад: Sergey B Kirpichev и Serhiy Storchaka в [gh-143715](https://python-all.ru/3.16/whatsnew/3.14.html).)1523- Атрибуты `__version__`, `version` и `VERSION` были объявлены устаревшими в этих модулях стандартной библиотеки и будут удалены в Python 3.20. Вместо них используйте [`sys.version_info`](https://python-all.ru/3.16/library/sys.html#sys.version_info).15241525 - [`argparse`](https://python-all.ru/3.16/library/argparse.html#module-argparse)1526 - [`csv`](https://python-all.ru/3.16/library/csv.html#module-csv)1527 - [`ctypes`](https://python-all.ru/3.16/library/ctypes.html#module-ctypes)1528 - `ctypes.macholib`1529 - [`decimal`](https://python-all.ru/3.16/library/decimal.html#module-decimal) (используйте [`decimal.SPEC_VERSION`](https://python-all.ru/3.16/library/decimal.html#decimal.SPEC_VERSION) вместо)1530 - [`http.server`](https://python-all.ru/3.16/library/http.server.html#module-http.server)1531 - [`imaplib`](https://python-all.ru/3.16/library/imaplib.html#module-imaplib)1532 - [`ipaddress`](https://python-all.ru/3.16/library/ipaddress.html#module-ipaddress)1533 - [`json`](https://python-all.ru/3.16/library/json.html#module-json)1534 - [`logging`](https://python-all.ru/3.16/library/logging.html#module-logging) (`__date__` также устарел)1535 - [`optparse`](https://python-all.ru/3.16/library/optparse.html#module-optparse)1536 - [`pickle`](https://python-all.ru/3.16/library/pickle.html#module-pickle)1537 - [`platform`](https://python-all.ru/3.16/library/platform.html#module-platform)1538 - [`re`](https://python-all.ru/3.16/library/re.html#module-re)1539 - [`socketserver`](https://python-all.ru/3.16/library/socketserver.html#module-socketserver)1540 - [`tabnanny`](https://python-all.ru/3.16/library/tabnanny.html#module-tabnanny)1541 - [`tarfile`](https://python-all.ru/3.16/library/tarfile.html#module-tarfile)1542 - [`tkinter.font`](https://python-all.ru/3.16/library/tkinter.font.html#module-tkinter.font)1543 - [`tkinter.ttk`](https://python-all.ru/3.16/library/tkinter.ttk.html#module-tkinter.ttk)1544 - [`wsgiref.simple_server`](https://python-all.ru/3.16/library/wsgiref.html#module-wsgiref.simple_server)1545 - [`xml.etree.ElementTree`](https://python-all.ru/3.16/library/xml.etree.elementtree.html#module-xml.etree.ElementTree)1546 - `xml.sax.expatreader`1547 - [`xml.sax.handler`](https://python-all.ru/3.16/library/xml.sax.handler.html#module-xml.sax.handler)1548 - [`zlib`](https://python-all.ru/3.16/library/zlib.html#module-zlib)15491550 (Вклад: Hugo van Kemenade и Stan Ulbrych в [gh-76007](https://python-all.ru/3.16/whatsnew/3.14.html).)1551- Устаревшие элементы, определённые [**PEP 829**](https://python-all.ru/3.16/whatsnew/3.14.html):15521553 - Предупреждения выводятся для строк `import`, найденных в `name.pth` файлах.1554 - Файлы `name.pth` больше не декодируются в кодировке локали по умолчанию. Они **ДОЛЖНЫ** быть закодированы в `utf-8-sig`.15551556 (Вклад: Barry Warsaw в [gh-148641](https://python-all.ru/3.16/whatsnew/3.14.html).)1557- [`ast`](https://python-all.ru/3.16/library/ast.html#module-ast):15581559 - Создание экземпляров абстрактных узлов AST (таких как [`ast.AST`](https://python-all.ru/3.16/library/ast.html#ast.AST) или `ast.expr`) устарело и будет вызывать ошибку в Python 3.20.15601561### Ожидается удаление в Python 3.2115621563- [`abc`](https://python-all.ru/3.16/library/abc.html#module-abc)15641565 > - Мягко устаревшие с Python 3.3 [`abc.abstractclassmethod`](https://python-all.ru/3.16/library/abc.html#abc.abstractclassmethod), [`abc.abstractstaticmethod`](https://python-all.ru/3.16/library/abc.html#abc.abstractstaticmethod) и [`abc.abstractproperty`](https://python-all.ru/3.16/library/abc.html#abc.abstractproperty) теперь вызывают [`DeprecationWarning`](https://python-all.ru/3.16/library/exceptions.html#DeprecationWarning). Эти классы будут удалены в Python 3.21, вместо них используйте [`abc.abstractmethod()`](https://python-all.ru/3.16/library/abc.html#abc.abstractmethod) с [`classmethod()`](https://python-all.ru/3.16/library/functions.html#classmethod), [`staticmethod()`](https://python-all.ru/3.16/library/functions.html#staticmethod) и [`property`](https://python-all.ru/3.16/library/functions.html#property) соответственно.1566- [`ast`](https://python-all.ru/3.16/library/ast.html#module-ast):15671568 - Классы `slice`, `Index`, `ExtSlice`, `Suite`, `Param`, `AugLoad` и `AugStore` будут удалены в Python 3.21. Эти типы не создаются синтаксическим анализатором и не принимаются генератором кода.1569 - Свойство `dims` объекта `ast.Tuple` будет удалено в Python 3.21. Используйте свойство `ast.Tuple.elts` вместо него.1570- [`struct`](https://python-all.ru/3.16/library/struct.html#module-struct):15711572 - Мягко устаревшие с Python 3.15, коды типов `'F'` и `'D'` теперь устарели. Эти коды будут удалены в Python 3.21. Используйте вместо них двухбуквенные формы `'Zf'` и `'Zd'`.1573- [`tempfile`](https://python-all.ru/3.16/library/tempfile.html#module-tempfile):15741575 - `tempfile._TemporaryFileWrapper` будет удалён в Python 3.21. Используйте публичный [`tempfile.TemporaryFileWrapper`](https://python-all.ru/3.16/library/tempfile.html#tempfile.TemporaryFileWrapper) вместо него.15761577### Будет удалено в будущих версиях15781579Следующие API будут удалены в будущем, хотя на данный момент нет запланированной даты их удаления.15801581- [`argparse`](https://python-all.ru/3.16/library/argparse.html#module-argparse):15821583 - Вложение групп аргументов и вложение взаимоисключающих групп устарело.1584 - Передача недокументированного именованного аргумента *prefix\_chars* в [`add_argument_group()`](https://python-all.ru/3.16/library/argparse.html#argparse.ArgumentParser.add_argument_group) теперь устарела.1585 - Конвертер типов [`argparse.FileType`](https://python-all.ru/3.16/library/argparse.html#argparse.FileType) устарел.1586- [`builtins`](https://python-all.ru/3.16/library/builtins.html#module-builtins):15871588 - Генераторы: сигнатура `throw(type, exc, tb)` и `athrow(type, exc, tb)` устарела: используйте `throw(exc)` и `athrow(exc)` вместо неё, сигнатуру с одним аргументом.1589 - В настоящее время Python принимает числовые литералы, за которыми сразу следуют ключевые слова, например `0in x`, `1or x`, `0if 1else 2`. Это допускает запутанные и неоднозначные выражения вроде `[0x1for x in y]` (которое может быть интерпретировано как `[0x1 for x in y]` или `[0x1f or x in y]`). Выдаётся предупреждение синтаксиса, если за числовым литералом сразу следует одно из ключевых слов [`and`](https://python-all.ru/3.16/reference/expressions.html#and), [`else`](https://python-all.ru/3.16/reference/compound_stmts.html#else), [`for`](https://python-all.ru/3.16/reference/compound_stmts.html#for), [`if`](https://python-all.ru/3.16/reference/compound_stmts.html#if), [`in`](https://python-all.ru/3.16/reference/expressions.html#in), [`is`](https://python-all.ru/3.16/reference/expressions.html#is) и [`or`](https://python-all.ru/3.16/reference/expressions.html#or). В будущем выпуске это будет изменено на синтаксическую ошибку. ([gh-87999](https://python-all.ru/3.16/whatsnew/3.14.html))1590 - Поддержка методов `__index__()` и `__int__()`, возвращающих не-int тип: эти методы должны будут возвращать экземпляр строгого подкласса [`int`](https://python-all.ru/3.16/library/functions.html#int).1591 - Поддержка метода `__float__()`, возвращающего строгий подкласс [`float`](https://python-all.ru/3.16/library/functions.html#float): эти методы должны будут возвращать экземпляр `float`.1592 - Поддержка метода `__complex__()`, возвращающего строгий подкласс [`complex`](https://python-all.ru/3.16/library/functions.html#complex): эти методы должны будут возвращать экземпляр `complex`.1593 - Передача комплексного числа в качестве аргумента *real* или *imag* в конструкторе [`complex()`](https://python-all.ru/3.16/library/functions.html#complex) теперь устарела; его следует передавать только как единственный позиционный аргумент. (Автор: Сергей Сторчака в [gh-109218](https://python-all.ru/3.16/whatsnew/3.14.html).)1594- [`calendar`](https://python-all.ru/3.16/library/calendar.html#module-calendar): константы `calendar.January` и `calendar.February` устарели и заменены на [`calendar.JANUARY`](https://python-all.ru/3.16/library/calendar.html#calendar.JANUARY) и [`calendar.FEBRUARY`](https://python-all.ru/3.16/library/calendar.html#calendar.FEBRUARY). (Автор: Prince Roshan в [gh-103636](https://python-all.ru/3.16/whatsnew/3.14.html).)1595- [`codecs`](https://python-all.ru/3.16/library/codecs.html#module-codecs): используйте [`open()`](https://python-all.ru/3.16/library/functions.html#open) вместо [`codecs.open()`](https://python-all.ru/3.16/library/codecs.html#codecs.open). ([gh-133038](https://python-all.ru/3.16/whatsnew/3.14.html))1596- `codeobject.co_lnotab`: используйте метод [`codeobject.co_lines()`](https://python-all.ru/3.16/reference/datamodel.html#codeobject.co_lines) вместо этого.1597- [`datetime`](https://python-all.ru/3.16/library/datetime.html#module-datetime):15981599 - [`utcnow()`](https://python-all.ru/3.16/library/datetime.html#datetime.datetime.utcnow): используйте `datetime.datetime.now(tz=datetime.UTC)`.1600 - [`utcfromtimestamp()`](https://python-all.ru/3.16/library/datetime.html#datetime.datetime.utcfromtimestamp): используйте `datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)`.1601- [`gettext`](https://python-all.ru/3.16/library/gettext.html#module-gettext): значение множественного числа должно быть целым числом.1602- [`importlib`](https://python-all.ru/3.16/library/importlib.html#module-importlib):16031604 - [`cache_from_source()`](https://python-all.ru/3.16/library/importlib.html#importlib.util.cache_from_source): параметр *debug\_override* устарел: используйте параметр *optimization* вместо него.1605- [`importlib.metadata`](https://python-all.ru/3.16/library/importlib.metadata.html#module-importlib.metadata):16061607 - `EntryPoints`: интерфейс кортежа.1608 - Неявное `None` для возвращаемых значений.1609- [`logging`](https://python-all.ru/3.16/library/logging.html#module-logging): метод `warn()` устарел начиная с Python 3.3, используйте [`warning()`](https://python-all.ru/3.16/library/logging.html#logging.warning) вместо него.1610- [`mailbox`](https://python-all.ru/3.16/library/mailbox.html#module-mailbox): использование StringIO в режиме ввода и текстовом режиме устарело, используйте BytesIO и двоичный режим.1611- [`os`](https://python-all.ru/3.16/library/os.html#module-os): вызов [`os.register_at_fork()`](https://python-all.ru/3.16/library/os.html#os.register_at_fork) в многопоточном процессе.1612- [`os.path`](https://python-all.ru/3.16/library/os.path.html#module-os.path): [`os.path.commonprefix()`](https://python-all.ru/3.16/library/os.path.html#os.path.commonprefix) устарела, используйте [`os.path.commonpath()`](https://python-all.ru/3.16/library/os.path.html#os.path.commonpath) для префиксов путей. Функция `os.path.commonprefix()` объявлена устаревшей из-за вводящего в заблуждение названия и модуля. Эта функция небезопасна для использования в качестве префиксов путей, несмотря на то что находится в модуле для работы с путями, что означает, что легко случайно внести уязвимости обхода путей в программы на Python, используя эту функцию.1613- `pydoc.ErrorDuringImport`: кортежное значение для параметра *exc\_info* устарело, используйте экземпляр исключения.1614- [`re`](https://python-all.ru/3.16/library/re.html#module-re): теперь применяются более строгие правила для числовых ссылок на группы и имён групп в регулярных выражениях. В качестве числовой ссылки теперь принимается только последовательность цифр ASCII. Имя группы в байтовых шаблонах и строках замены теперь может содержать только буквы ASCII, цифры и знак подчёркивания. (Автор: Сергей Сторчака в [gh-91760](https://python-all.ru/3.16/whatsnew/3.14.html).)1615- [`shutil`](https://python-all.ru/3.16/library/shutil.html#module-shutil): параметр *onerror* метода [`rmtree()`](https://python-all.ru/3.16/library/shutil.html#shutil.rmtree) устарел в Python 3.12; используйте параметр *onexc* вместо него.1616- [`ssl`](https://python-all.ru/3.16/library/ssl.html#module-ssl): опции и протоколы:16171618 - [`ssl.SSLContext`](https://python-all.ru/3.16/library/ssl.html#ssl.SSLContext) без аргумента протокол устарело.1619 - [`ssl.SSLContext`](https://python-all.ru/3.16/library/ssl.html#ssl.SSLContext): [`set_npn_protocols()`](https://python-all.ru/3.16/library/ssl.html#ssl.SSLContext.set_npn_protocols) и `selected_npn_protocol()` устарели: используйте ALPN вместо них.1620 - `ssl.OP_NO_SSL*`: опции1621 - `ssl.OP_NO_TLS*`: опции1622 - `ssl.PROTOCOL_SSLv3`1623 - `ssl.PROTOCOL_TLS`1624 - `ssl.PROTOCOL_TLSv1`1625 - `ssl.PROTOCOL_TLSv1_1`1626 - `ssl.PROTOCOL_TLSv1_2`1627 - `ssl.TLSVersion.SSLv3`1628 - `ssl.TLSVersion.TLSv1`1629 - `ssl.TLSVersion.TLSv1_1`1630- [`threading`](https://python-all.ru/3.16/library/threading.html#module-threading): методы16311632 - `threading.Condition.notifyAll()`: используйте [`notify_all()`](https://python-all.ru/3.16/library/threading.html#threading.Condition.notify_all).1633 - `threading.Event.isSet()`: используйте [`is_set()`](https://python-all.ru/3.16/library/threading.html#threading.Event.is_set).1634 - `threading.Thread.isDaemon()`, [`threading.Thread.setDaemon()`](https://python-all.ru/3.16/library/threading.html#threading.Thread.setDaemon): используйте атрибут [`threading.Thread.daemon`](https://python-all.ru/3.16/library/threading.html#threading.Thread.daemon).1635 - `threading.Thread.getName()`, [`threading.Thread.setName()`](https://python-all.ru/3.16/library/threading.html#threading.Thread.setName): используйте атрибут [`threading.Thread.name`](https://python-all.ru/3.16/library/threading.html#threading.Thread.name).1636 - `threading.currentThread()`: используйте [`threading.current_thread()`](https://python-all.ru/3.16/library/threading.html#threading.current_thread).1637 - `threading.activeCount()`: используйте [`threading.active_count()`](https://python-all.ru/3.16/library/threading.html#threading.active_count).1638- [`typing.Text`](https://python-all.ru/3.16/library/typing.html#typing.Text) ([gh-92332](https://python-all.ru/3.16/whatsnew/3.14.html)).1639- Внутренний класс `typing._UnionGenericAlias` больше не используется для реализации [`typing.Union`](https://python-all.ru/3.16/library/typing.html#typing.Union). Для сохранения совместимости с пользователями, использующими этот закрытый класс, будет предоставлена прослойка совместимости как минимум до Python 3.17. (Автор: Jelle Zijlstra, [gh-105499](https://python-all.ru/3.16/whatsnew/3.14.html).)1640- [`unittest.IsolatedAsyncioTestCase`](https://python-all.ru/3.16/library/unittest.html#unittest.IsolatedAsyncioTestCase): возврат значения, не являющегося `None`, из тестового примера устарел.1641- [`urllib.parse`](https://python-all.ru/3.16/library/urllib.parse.html#module-urllib.parse) устаревшие функции: используйте [`urlparse()`](https://python-all.ru/3.16/library/urllib.parse.html#urllib.parse.urlparse) вместо них.16421643 - `splitattr()`1644 - `splithost()`1645 - `splitnport()`1646 - `splitpasswd()`1647 - `splitport()`1648 - `splitquery()`1649 - `splittag()`1650 - `splittype()`1651 - `splituser()`1652 - `splitvalue()`1653 - `to_bytes()`1654- [`wsgiref`](https://python-all.ru/3.16/library/wsgiref.html#module-wsgiref): `SimpleHandler.stdout.write()` не должна выполнять частичную запись.1655- [`xml.etree.ElementTree`](https://python-all.ru/3.16/library/xml.etree.elementtree.html#module-xml.etree.ElementTree): проверка истинностного значения [`Element`](https://python-all.ru/3.16/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element) устарела. В будущем выпуске она всегда будет возвращать `True`. Вместо этого используйте явные проверки `len(elem)` или `elem is not None`.1656- [`sys._clear_type_cache()`](https://python-all.ru/3.16/library/sys.html#sys._clear_type_cache) устарело: используйте [`sys._clear_internal_caches()`](https://python-all.ru/3.16/library/sys.html#sys._clear_internal_caches) вместо него.16571658## Изменения байткода CPython16591660- Опкод `BINARY_SUBSCR` заменён опкодом [`BINARY_OP`](https://python-all.ru/3.16/library/dis.html#opcode-BINARY_OP) с аргументом `NB_SUBSCR`. (Предложено Ирит Катриэль в [gh-100239](https://python-all.ru/3.16/whatsnew/3.14.html).)1661- Добавлены опкоды [`BUILD_INTERPOLATION`](https://python-all.ru/3.16/library/dis.html#opcode-BUILD_INTERPOLATION) и [`BUILD_TEMPLATE`](https://python-all.ru/3.16/library/dis.html#opcode-BUILD_TEMPLATE) для создания новых экземпляров [`Interpolation`](https://python-all.ru/3.16/library/string.templatelib.html#string.templatelib.Interpolation) и [`Template`](https://python-all.ru/3.16/library/string.templatelib.html#string.templatelib.Template) соответственно. (Предложено Лисандросом Николау и другими в [gh-132661](https://python-all.ru/3.16/whatsnew/3.14.html); см. также [PEP 750: Шаблонные строки](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-template-string-literals)).1662- Удалён опкод `BUILD_CONST_KEY_MAP`. Используйте вместо него [`BUILD_MAP`](https://python-all.ru/3.16/library/dis.html#opcode-BUILD_MAP). (Предложено Марком Шенноном в [gh-122160](https://python-all.ru/3.16/whatsnew/3.14.html).)1663- Заменить опкод `LOAD_ASSERTION_ERROR` на [`LOAD_COMMON_CONSTANT`](https://python-all.ru/3.16/library/dis.html#opcode-LOAD_COMMON_CONSTANT) и добавить поддержку загрузки [`NotImplementedError`](https://python-all.ru/3.16/library/exceptions.html#NotImplementedError).1664- Добавлены опкоды [`LOAD_FAST_BORROW`](https://python-all.ru/3.16/library/dis.html#opcode-LOAD_FAST_BORROW) и [`LOAD_FAST_BORROW_LOAD_FAST_BORROW`](https://python-all.ru/3.16/library/dis.html#opcode-LOAD_FAST_BORROW_LOAD_FAST_BORROW) для снижения накладных расходов на подсчёт ссылок, когда интерпретатор может доказать, что ссылка во фрейме переживает ссылку, загруженную в стек. (Предложено Мэттом Пейджем в [gh-130704](https://python-all.ru/3.16/whatsnew/3.14.html).)1665- Добавлен опкод [`LOAD_SMALL_INT`](https://python-all.ru/3.16/library/dis.html#opcode-LOAD_SMALL_INT), который помещает в стек небольшое целое число, равное `oparg`. Опкод `RETURN_CONST` удалён, так как он больше не используется. (Предложено Марком Шенноном в [gh-125837](https://python-all.ru/3.16/whatsnew/3.14.html).)1666- Добавлена новая инструкция [`LOAD_SPECIAL`](https://python-all.ru/3.16/library/dis.html#opcode-LOAD_SPECIAL). С её помощью генерируется код для операторов [`with`](https://python-all.ru/3.16/reference/compound_stmts.html#with) и [`async with`](https://python-all.ru/3.16/reference/compound_stmts.html#async-with). Удалены инструкции `BEFORE_WITH` и `BEFORE_ASYNC_WITH`. (Автор: Mark Shannon в [gh-120507](https://python-all.ru/3.16/whatsnew/3.14.html).)1667- Добавлен опкод [`POP_ITER`](https://python-all.ru/3.16/library/dis.html#opcode-POP_ITER) для поддержки «виртуальных» итераторов. (Автор: Mark Shannon в [gh-132554](https://python-all.ru/3.16/whatsnew/3.14.html).)16681669### Псевдоинструкции16701671- Добавлена псевдоинструкция `ANNOTATIONS_PLACEHOLDER` для поддержки частично выполненных аннотаций на уровне модуля с [отложенным вычислением аннотаций](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-deferred-annotations). (Автор: Jelle Zijlstra в [gh-130907](https://python-all.ru/3.16/whatsnew/3.14.html).)1672- Добавлена псевдоинструкция `BINARY_OP_EXTEND`, которая выполняет пару функций (функции проверки guard и специализации), получаемых из inline-кэша. (Автор: Irit Katriel в [gh-100239](https://python-all.ru/3.16/whatsnew/3.14.html).)1673- Добавлены три специализации для [`CALL_KW`](https://python-all.ru/3.16/library/dis.html#opcode-CALL_KW): `CALL_KW_PY` для вызовов функций Python, `CALL_KW_BOUND_METHOD` для вызовов связанных методов и `CALL_KW_NON_PY` для всех остальных вызовов. (Автор: Mark Shannon в [gh-118093](https://python-all.ru/3.16/whatsnew/3.14.html).)1674- Добавлены псевдоинструкции [`JUMP_IF_TRUE`](https://python-all.ru/3.16/library/dis.html#opcode-JUMP_IF_TRUE) и [`JUMP_IF_FALSE`](https://python-all.ru/3.16/library/dis.html#opcode-JUMP_IF_FALSE) – условные переходы, не влияющие на стек. Заменены последовательностью `COPY 1`, `TO_BOOL`, `POP_JUMP_IF_TRUE/FALSE`. (Автор: Irit Katriel в [gh-124285](https://python-all.ru/3.16/whatsnew/3.14.html).)1675- Добавлена псевдоинструкция `LOAD_CONST_MORTAL`. (Автор: Mark Shannon в [gh-128685](https://python-all.ru/3.16/whatsnew/3.14.html).)1676- Добавлена псевдоинструкция `LOAD_CONST_IMMORTAL`, которая делает то же, что и `LOAD_CONST`, но более эффективна для бессмертных объектов. (Автор: Mark Shannon в [gh-125837](https://python-all.ru/3.16/whatsnew/3.14.html).)1677- Добавлена псевдоинструкция [`NOT_TAKEN`](https://python-all.ru/3.16/library/dis.html#opcode-NOT_TAKEN), используемая [`sys.monitoring`](https://python-all.ru/3.16/library/sys.monitoring.html#module-sys.monitoring) для записи событий ветвления (например, [`BRANCH_LEFT`](https://python-all.ru/3.16/library/sys.monitoring.html#monitoring-event-BRANCH_LEFT)). (Автор: Mark Shannon в [gh-122548](https://python-all.ru/3.16/whatsnew/3.14.html).)16781679## Изменения C API16801681### C API конфигурации Python16821683Добавлен [C API PyInitConfig](https://python-all.ru/3.16/c-api/init_config.html#pyinitconfig-api) для настройки инициализации Python, не полагаясь на C-структуры, с возможностью вносить ABI-совместимые изменения в будущем.16841685Завершён [**PEP 587**](https://python-all.ru/3.16/whatsnew/3.14.html) [C API PyConfig](https://python-all.ru/3.16/c-api/init_config.html#pyconfig-api) добавлением [`PyInitConfig_AddModule()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyInitConfig_AddModule), который можно использовать для добавления встроенного модуля расширения – функциональность, ранее называвшаяся «inittab».16861687Добавлены функции [`PyConfig_Get()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) и [`PyConfig_Set()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Set) для получения и установки текущей конфигурации среды выполнения.16881689[**PEP 587**](https://python-all.ru/3.16/whatsnew/3.14.html) «Конфигурация инициализации Python» унифицировал все способы настройки инициализации Python. Этот PEP также объединяет конфигурацию преинициализации и инициализации в единый API. Более того, этот PEP предоставляет единственный вариант встраивания Python вместо двух вариантов «Python» и «Isolated» (PEP 587), что дополнительно упрощает API.16901691Низкоуровневый API PyConfig из PEP 587 остаётся доступным для случаев, когда требуется намеренно более высокая степень связанности с деталями реализации CPython (например, для эмуляции полной функциональности интерфейса командной строки CPython, включая его механизмы конфигурации).16921693(Автор: Victor Stinner в [gh-107954](https://python-all.ru/3.16/whatsnew/3.14.html).)16941695> **См. также**1696>1697> [**PEP 741**](https://python-all.ru/3.16/whatsnew/3.14.html) и [**PEP 587**](https://python-all.ru/3.16/whatsnew/3.14.html)16981699### Новые возможности C API17001701- Добавлены [`Py_PACK_VERSION()`](https://python-all.ru/3.16/c-api/apiabiversion.html#c.Py_PACK_VERSION) и [`Py_PACK_FULL_VERSION()`](https://python-all.ru/3.16/c-api/apiabiversion.html#c.Py_PACK_FULL_VERSION) – два новых макроса для упаковки номеров версий Python в битовом представлении. Это полезно для сравнения с [`Py_Version`](https://python-all.ru/3.16/c-api/apiabiversion.html#c.Py_Version) или [`PY_VERSION_HEX`](https://python-all.ru/3.16/c-api/apiabiversion.html#c.PY_VERSION_HEX). (Автор: Petr Viktorin в [gh-128629](https://python-all.ru/3.16/whatsnew/3.14.html).)1702- Добавлена функция [`PyBytes_Join(sep, iterable)`](https://python-all.ru/3.16/c-api/bytes.html#c.PyBytes_Join), аналогичная `sep.join(iterable)` в Python. (Автор: Victor Stinner в [gh-121645](https://python-all.ru/3.16/whatsnew/3.14.html).)1703- Добавлены функции для работы с конфигурацией текущего интерпретатора Python во время выполнения ([PEP 741: C API конфигурации Python](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-capi-config)):17041705 - [`PyConfig_Get()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get)1706 - [`PyConfig_GetInt()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_GetInt)1707 - [`PyConfig_Set()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Set)1708 - [`PyConfig_Names()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Names)17091710 (Автор: Victor Stinner в [gh-107954](https://python-all.ru/3.16/whatsnew/3.14.html).)1711- Добавлены функции для настройки инициализации Python ([PEP 741: C API конфигурации Python](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-capi-config)):17121713 - [`Py_InitializeFromInitConfig()`](https://python-all.ru/3.16/c-api/init_config.html#c.Py_InitializeFromInitConfig)1714 - [`PyInitConfig_AddModule()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyInitConfig_AddModule)1715 - [`PyInitConfig_Create()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyInitConfig_Create)1716 - [`PyInitConfig_Free()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyInitConfig_Free)1717 - [`PyInitConfig_FreeStrList()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyInitConfig_FreeStrList)1718 - [`PyInitConfig_GetError()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyInitConfig_GetError)1719 - [`PyInitConfig_GetExitCode()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyInitConfig_GetExitCode)1720 - [`PyInitConfig_GetInt()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyInitConfig_GetInt)1721 - [`PyInitConfig_GetStr()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyInitConfig_GetStr)1722 - [`PyInitConfig_GetStrList()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyInitConfig_GetStrList)1723 - [`PyInitConfig_HasOption()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyInitConfig_HasOption)1724 - [`PyInitConfig_SetInt()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyInitConfig_SetInt)1725 - [`PyInitConfig_SetStr()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyInitConfig_SetStr)1726 - [`PyInitConfig_SetStrList()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyInitConfig_SetStrList)17271728 (Автор: Victor Stinner в [gh-107954](https://python-all.ru/3.16/whatsnew/3.14.html).)1729- Добавлена функция [`Py_fopen()`](https://python-all.ru/3.16/c-api/sys.html#c.Py_fopen) для открытия файла. Она работает аналогично стандартной функции C `fopen()`, но принимает объект Python для параметра *path* и устанавливает исключение при ошибке. Для закрытия файла следует использовать новую функцию [`Py_fclose()`](https://python-all.ru/3.16/c-api/sys.html#c.Py_fclose). (Автор: Victor Stinner в [gh-127350](https://python-all.ru/3.16/whatsnew/3.14.html).)1730- Добавлена [`Py_HashBuffer()`](https://python-all.ru/3.16/c-api/hash.html#c.Py_HashBuffer) для вычисления и возврата хеш-значения буфера. (Авторы: Antoine Pitrou и Victor Stinner в [gh-122854](https://python-all.ru/3.16/whatsnew/3.14.html).)1731- Добавлены вспомогательные функции [`PyImport_ImportModuleAttr()`](https://python-all.ru/3.16/c-api/import.html#c.PyImport_ImportModuleAttr) и [`PyImport_ImportModuleAttrString()`](https://python-all.ru/3.16/c-api/import.html#c.PyImport_ImportModuleAttrString) для импорта модуля и получения атрибута модуля. (Автор: Victor Stinner в [gh-128911](https://python-all.ru/3.16/whatsnew/3.14.html).)1732- Добавлена [`PyIter_NextItem()`](https://python-all.ru/3.16/c-api/iter.html#c.PyIter_NextItem) для замены [`PyIter_Next()`](https://python-all.ru/3.16/c-api/iter.html#c.PyIter_Next), которая имеет неоднозначное возвращаемое значение. (Авторы: Irit Katriel и Erlend Aasland в [gh-105201](https://python-all.ru/3.16/whatsnew/3.14.html).)1733- Добавлена функция [`PyLong_GetSign()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_GetSign) для получения знака объектов [`int`](https://python-all.ru/3.16/library/functions.html#int). (Автор: Sergey B Kirpichev в [gh-116560](https://python-all.ru/3.16/whatsnew/3.14.html).)1734- Добавлены [`PyLong_IsPositive()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_IsPositive), [`PyLong_IsNegative()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_IsNegative) и [`PyLong_IsZero()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_IsZero) для проверки, является ли [`PyLongObject`](https://python-all.ru/3.16/c-api/long.html#c.PyLongObject) положительным, отрицательным или нулём соответственно. (Авторы: James Roy и Sergey B Kirpichev в [gh-126061](https://python-all.ru/3.16/whatsnew/3.14.html).)1735- Добавлены новые функции для преобразования чисел C `<stdint.h>` в/из объектов Python [`int`](https://python-all.ru/3.16/library/functions.html#int):17361737 - [`PyLong_AsInt32()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_AsInt32)1738 - [`PyLong_AsInt64()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_AsInt64)1739 - [`PyLong_AsUInt32()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_AsUInt32)1740 - [`PyLong_AsUInt64()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_AsUInt64)1741 - [`PyLong_FromInt32()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_FromInt32)1742 - [`PyLong_FromInt64()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_FromInt64)1743 - [`PyLong_FromUInt32()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_FromUInt32)1744 - [`PyLong_FromUInt64()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_FromUInt64)17451746 (Автор: Victor Stinner в [gh-120389](https://python-all.ru/3.16/whatsnew/3.14.html).)1747- Добавлен новый API импорта и экспорта для объектов Python [`int`](https://python-all.ru/3.16/library/functions.html#int) ([**PEP 757**](https://python-all.ru/3.16/whatsnew/3.14.html)):17481749 - [`PyLong_GetNativeLayout()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_GetNativeLayout)1750 - [`PyLong_Export()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_Export)1751 - [`PyLong_FreeExport()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_FreeExport)1752 - [`PyLongWriter_Create()`](https://python-all.ru/3.16/c-api/long.html#c.PyLongWriter_Create)1753 - [`PyLongWriter_Finish()`](https://python-all.ru/3.16/c-api/long.html#c.PyLongWriter_Finish)1754 - [`PyLongWriter_Discard()`](https://python-all.ru/3.16/c-api/long.html#c.PyLongWriter_Discard)17551756 (Авторы: Sergey B Kirpichev и Victor Stinner в [gh-102471](https://python-all.ru/3.16/whatsnew/3.14.html).)1757- Добавлены [`PyMonitoring_FireBranchLeftEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FireBranchLeftEvent) и [`PyMonitoring_FireBranchRightEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FireBranchRightEvent) для генерации событий [`BRANCH_LEFT`](https://python-all.ru/3.16/library/sys.monitoring.html#monitoring-event-BRANCH_LEFT) и [`BRANCH_RIGHT`](https://python-all.ru/3.16/library/sys.monitoring.html#monitoring-event-BRANCH_RIGHT) соответственно. (Автор: Mark Shannon в [gh-122548](https://python-all.ru/3.16/whatsnew/3.14.html).)1758- Добавлена функция [`PyType_Freeze()`](https://python-all.ru/3.16/c-api/type.html#c.PyType_Freeze) для создания неизменяемого типа. (Автор: Victor Stinner в [gh-121654](https://python-all.ru/3.16/whatsnew/3.14.html).)1759- Добавлены слоты [`PyType_GetBaseByToken()`](https://python-all.ru/3.16/c-api/type.html#c.PyType_GetBaseByToken) и [`Py_tp_token`](https://python-all.ru/3.16/c-api/type.html#c.Py_tp_token) для упрощения определения суперкласса, что решает проблему проверки типов, описанную в [**PEP 630**](https://python-all.ru/3.16/whatsnew/3.14.html). (Автор: [gh-124153](https://python-all.ru/3.16/whatsnew/3.14.html).)1760- Добавлена новая функция [`PyUnicode_Equal()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicode_Equal) для проверки равенства двух строк. Функция также добавлена в Limited C API. (Автор: Victor Stinner в [gh-124502](https://python-all.ru/3.16/whatsnew/3.14.html).)1761- Добавлен новый API [`PyUnicodeWriter`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter) для создания объекта Python [`str`](https://python-all.ru/3.16/library/stdtypes.html#str) со следующими функциями:17621763 - [`PyUnicodeWriter_Create()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_Create)1764 - [`PyUnicodeWriter_DecodeUTF8Stateful()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_DecodeUTF8Stateful)1765 - [`PyUnicodeWriter_Discard()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_Discard)1766 - [`PyUnicodeWriter_Finish()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_Finish)1767 - [`PyUnicodeWriter_Format()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_Format)1768 - [`PyUnicodeWriter_WriteASCII()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteASCII)1769 - [`PyUnicodeWriter_WriteChar()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteChar)1770 - [`PyUnicodeWriter_WriteRepr()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteRepr)1771 - [`PyUnicodeWriter_WriteStr()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteStr)1772 - [`PyUnicodeWriter_WriteSubstring()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteSubstring)1773 - [`PyUnicodeWriter_WriteUCS4()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteUCS4)1774 - [`PyUnicodeWriter_WriteUTF8()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteUTF8)1775 - [`PyUnicodeWriter_WriteWideChar()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteWideChar)17761777 (Автор: Victor Stinner в [gh-119182](https://python-all.ru/3.16/whatsnew/3.14.html).)1778- Форматы `k` и `K` в [`PyArg_ParseTuple()`](https://python-all.ru/3.16/c-api/arg.html#c.PyArg_ParseTuple) и подобных функциях теперь используют [`__index__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__index__), если он доступен, как и все остальные целочисленные форматы. (Автор: Serhiy Storchaka в [gh-112068](https://python-all.ru/3.16/whatsnew/3.14.html).)1779- Добавлена поддержка нового форматного элемента `p` в [`Py_BuildValue()`](https://python-all.ru/3.16/c-api/arg.html#c.Py_BuildValue), который создаёт объект Python [`bool`](https://python-all.ru/3.16/library/functions.html#bool) из целого числа C. (Автор: Pablo Galindo в [bpo-45325](https://python-all.ru/3.16/whatsnew/3.14.html).)1780- Добавлена [`PyUnstable_IsImmortal()`](https://python-all.ru/3.16/c-api/object.html#c.PyUnstable_IsImmortal) для определения, является ли объект [бессмертным](https://python-all.ru/3.16/glossary.html#term-immortal), для целей отладки. (Автор: Peter Bierma в [gh-128509](https://python-all.ru/3.16/whatsnew/3.14.html).)1781- Добавлена [`PyUnstable_Object_EnableDeferredRefcount()`](https://python-all.ru/3.16/c-api/object.html#c.PyUnstable_Object_EnableDeferredRefcount) для включения отложенного подсчёта ссылок, как описано в [**PEP 703**](https://python-all.ru/3.16/whatsnew/3.14.html).1782- Добавлена [`PyUnstable_Object_IsUniquelyReferenced()`](https://python-all.ru/3.16/c-api/object.html#c.PyUnstable_Object_IsUniquelyReferenced) в качестве замены `Py_REFCNT(op) == 1` в [сборке со свободной потоковой обработкой](https://python-all.ru/3.16/glossary.html#term-free-threading). (Автор: Peter Bierma в [gh-133140](https://python-all.ru/3.16/whatsnew/3.14.html).)1783- Добавлена [`PyUnstable_Object_IsUniqueReferencedTemporary()`](https://python-all.ru/3.16/c-api/object.html#c.PyUnstable_Object_IsUniqueReferencedTemporary) для определения, является ли объект уникальным временным объектом на стеке операндов интерпретатора. Это можно использовать в некоторых случаях в качестве замены проверки, является ли [`Py_REFCNT()`](https://python-all.ru/3.16/c-api/refcounting.html#c.Py_REFCNT) `1` для объектов Python, передаваемых в качестве аргументов функциям C API. (Автор: Sam Gross в [gh-133164](https://python-all.ru/3.16/whatsnew/3.14.html).)17841785### Изменения в Limited C API17861787- В Limited C API версии 3.14 и новее [`Py_TYPE()`](https://python-all.ru/3.16/c-api/structures.html#c.Py_TYPE) и [`Py_REFCNT()`](https://python-all.ru/3.16/c-api/refcounting.html#c.Py_REFCNT) теперь реализованы как непрозрачный вызов функции для скрытия деталей реализации. (Авторы: Victor Stinner в [gh-120600](https://python-all.ru/3.16/whatsnew/3.14.html) и [gh-124127](https://python-all.ru/3.16/whatsnew/3.14.html).)1788- Удалены макросы [`PySequence_Fast_GET_SIZE`](https://python-all.ru/3.16/c-api/sequence.html#c.PySequence_Fast_GET_SIZE), [`PySequence_Fast_GET_ITEM`](https://python-all.ru/3.16/c-api/sequence.html#c.PySequence_Fast_GET_ITEM), и [`PySequence_Fast_ITEMS`](https://python-all.ru/3.16/c-api/sequence.html#c.PySequence_Fast_ITEMS) из Limited C API, так как они всегда были нерабочими в Limited C API. (Автор: Victor Stinner в [gh-91417](https://python-all.ru/3.16/whatsnew/3.14.html).)17891790### Удалённые C API17911792- Создание [`immutable types`](https://python-all.ru/3.16/c-api/typeobj.html#c.Py_TPFLAGS_IMMUTABLETYPE) с изменяемыми базовыми классами было объявлено устаревшим в Python 3.12, и теперь вызывает [`TypeError`](https://python-all.ru/3.16/library/exceptions.html#TypeError). (Автор: Nikita Sobolev в [gh-119775](https://python-all.ru/3.16/whatsnew/3.14.html).)1793- Удалён член `PyDictObject.ma_version_tag`, который был устаревшим в Python 3.12. Используйте API [`PyDict_AddWatcher()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_AddWatcher) вместо него. (Автор: Sam Gross в [gh-124296](https://python-all.ru/3.16/whatsnew/3.14.html).)1794- Удалена приватная функция `_Py_InitializeMain()`. Она была [временным API](https://python-all.ru/3.16/glossary.html#term-provisional-API), добавленным в Python 3.8 с помощью [**PEP 587**](https://python-all.ru/3.16/whatsnew/3.14.html). (Автор: Victor Stinner в [gh-129033](https://python-all.ru/3.16/whatsnew/3.14.html).)1795- Удалены недокументированные API `Py_C_RECURSION_LIMIT` и `PyThreadState.c_recursion_remaining`. Они были добавлены в 3.13 и удалены без объявления устаревшими. Используйте [`Py_EnterRecursiveCall()`](https://python-all.ru/3.16/c-api/exceptions.html#c.Py_EnterRecursiveCall) для защиты от неконтролируемой рекурсии в коде C. (Удалено Petr Viktorin в [gh-133079](https://python-all.ru/3.16/whatsnew/3.14.html); см. также [gh-130396](https://python-all.ru/3.16/whatsnew/3.14.html).)17961797### Устаревшие C API17981799- Макрос `Py_HUGE_VAL` теперь [мягко устарел](https://python-all.ru/3.16/glossary.html#term-soft-deprecated). Вместо него используйте `INFINITY`. (Автор: Sergey B Kirpichev в [gh-120026](https://python-all.ru/3.16/whatsnew/3.14.html).)1800- Макросы `Py_IS_NAN`, `Py_IS_INFINITY`, и `Py_IS_FINITE` теперь [мягко устарели](https://python-all.ru/3.16/glossary.html#term-soft-deprecated). Вместо них используйте `isnan`, `isinf` и `isfinite`, доступные из `math.h` начиная с C99. (Автор: Sergey B Kirpichev в [gh-119613](https://python-all.ru/3.16/whatsnew/3.14.html).)1801- Некортежные последовательности теперь считаются устаревшими в качестве аргумента для форматного элемента `(items)` в [`PyArg_ParseTuple()`](https://python-all.ru/3.16/c-api/arg.html#c.PyArg_ParseTuple) и других [функциях разбора аргументов](https://python-all.ru/3.16/c-api/arg.html#arg-parsing), если *элементы* содержат форматные элементы, которые хранят [заимствованный буфер](https://python-all.ru/3.16/c-api/arg.html#c-arg-borrowed-buffer) или [заимствованную ссылку](https://python-all.ru/3.16/glossary.html#term-borrowed-reference). (Автор: Serhiy Storchaka в [gh-50333](https://python-all.ru/3.16/whatsnew/3.14.html).)1802- Функция `_PyMonitoring_FireBranchEvent` теперь устарела и должна быть заменена вызовами [`PyMonitoring_FireBranchLeftEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FireBranchLeftEvent) и [`PyMonitoring_FireBranchRightEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FireBranchRightEvent).1803- Ранее недокументированная функция [`PySequence_In()`](https://python-all.ru/3.16/c-api/sequence.html#c.PySequence_In) теперь [мягко устарела](https://python-all.ru/3.16/glossary.html#term-soft-deprecated). Вместо неё используйте [`PySequence_Contains()`](https://python-all.ru/3.16/c-api/sequence.html#c.PySequence_Contains). (Автор: Yuki Kobayashi в [gh-127896](https://python-all.ru/3.16/whatsnew/3.14.html).)18041805#### Ожидается удаление в Python 3.1518061807- `PyImport_ImportModuleNoBlock()`: Вместо этого используйте [`PyImport_ImportModule()`](https://python-all.ru/3.16/c-api/import.html#c.PyImport_ImportModule).1808- `PyWeakref_GetObject()` и `PyWeakref_GET_OBJECT()`: Вместо этого используйте [`PyWeakref_GetRef()`](https://python-all.ru/3.16/c-api/weakref.html#c.PyWeakref_GetRef). Проект [pythoncapi-compat](https://python-all.ru/3.16/whatsnew/3.14.html) можно использовать, чтобы получить `PyWeakref_GetRef()` на Python 3.12 и старше.1809- `PyUnicode_AsDecodedObject()`: Вместо этого используйте [`PyCodec_Decode()`](https://python-all.ru/3.16/c-api/codec.html#c.PyCodec_Decode).1810- `PyUnicode_AsDecodedUnicode()`: Вместо этого используйте [`PyCodec_Decode()`](https://python-all.ru/3.16/c-api/codec.html#c.PyCodec_Decode); Обратите внимание, что некоторые кодеки (например, «base64») могут возвращать тип, отличный от [`str`](https://python-all.ru/3.16/library/stdtypes.html#str), например, [`bytes`](https://python-all.ru/3.16/library/stdtypes.html#bytes).1811- `PyUnicode_AsEncodedObject()`: Вместо этого используйте [`PyCodec_Encode()`](https://python-all.ru/3.16/c-api/codec.html#c.PyCodec_Encode).1812- `PyUnicode_AsEncodedUnicode()`: Вместо этого используйте [`PyCodec_Encode()`](https://python-all.ru/3.16/c-api/codec.html#c.PyCodec_Encode); Обратите внимание, что некоторые кодеки (например, «base64») могут возвращать тип, отличный от [`bytes`](https://python-all.ru/3.16/library/stdtypes.html#bytes), например, [`str`](https://python-all.ru/3.16/library/stdtypes.html#str).1813- Функции инициализации Python, устаревшие в Python 3.13:18141815 - `Py_GetPath()`: Вместо этого используйте [`PyConfig_Get("module_search_paths")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) ([`sys.path`](https://python-all.ru/3.16/library/sys.html#sys.path)).1816 - `Py_GetPrefix()`: Вместо этого используйте [`PyConfig_Get("base_prefix")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) ([`sys.base_prefix`](https://python-all.ru/3.16/library/sys.html#sys.base_prefix)). Используйте `PyConfig_Get("prefix")` ([`sys.prefix`](https://python-all.ru/3.16/library/sys.html#sys.prefix)), если необходимо обрабатывать [виртуальные окружения](https://python-all.ru/3.16/library/venv.html#venv-def).1817 - `Py_GetExecPrefix()`: Вместо этого используйте [`PyConfig_Get("base_exec_prefix")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) ([`sys.base_exec_prefix`](https://python-all.ru/3.16/library/sys.html#sys.base_exec_prefix)). Используйте `PyConfig_Get("exec_prefix")` ([`sys.exec_prefix`](https://python-all.ru/3.16/library/sys.html#sys.exec_prefix)), если необходимо обрабатывать [виртуальные окружения](https://python-all.ru/3.16/library/venv.html#venv-def).1818 - `Py_GetProgramFullPath()`: Вместо этого используйте [`PyConfig_Get("executable")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) ([`sys.executable`](https://python-all.ru/3.16/library/sys.html#sys.executable)).1819 - `Py_GetProgramName()`: Вместо этого используйте [`PyConfig_Get("executable")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) ([`sys.executable`](https://python-all.ru/3.16/library/sys.html#sys.executable)).1820 - `Py_GetPythonHome()`: Используйте [`PyConfig_Get("home")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) или переменную окружения [`PYTHONHOME`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONHOME).18211822 Проект [pythoncapi-compat](https://python-all.ru/3.16/whatsnew/3.14.html) можно использовать, чтобы получить [`PyConfig_Get()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) на Python 3.13 и старше.18231824#### Запланировано к удалению в Python 3.1618251826- Функции для настройки инициализации Python, устаревшие в Python 3.11:18271828 - `PySys_SetArgvEx()`: Вместо этого задайте [`PyConfig.argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv).1829 - `PySys_SetArgv()`: Вместо этого задайте [`PyConfig.argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv).1830 - `Py_SetProgramName()`: Вместо этого задайте [`PyConfig.program_name`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.program_name).1831 - `Py_SetPythonHome()`: Вместо этого задайте [`PyConfig.home`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.home).18321833 API [`Py_InitializeFromConfig()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_InitializeFromConfig) следует использовать с [`PyConfig`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig) вместо этого.1834- Глобальные переменные конфигурации:18351836 - [`Py_DebugFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_DebugFlag): Используйте [`PyConfig.parser_debug`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.parser_debug) или [`PyConfig_Get("parser_debug")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1837 - [`Py_VerboseFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_VerboseFlag): Используйте [`PyConfig.verbose`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.verbose) или [`PyConfig_Get("verbose")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1838 - [`Py_QuietFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_QuietFlag): Используйте [`PyConfig.quiet`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.quiet) или [`PyConfig_Get("quiet")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1839 - [`Py_InteractiveFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_InteractiveFlag): Используйте [`PyConfig.interactive`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.interactive) или [`PyConfig_Get("interactive")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1840 - [`Py_InspectFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_InspectFlag): Используйте [`PyConfig.inspect`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.inspect) или [`PyConfig_Get("inspect")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1841 - [`Py_OptimizeFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_OptimizeFlag): Используйте [`PyConfig.optimization_level`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.optimization_level) или [`PyConfig_Get("optimization_level")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1842 - [`Py_NoSiteFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_NoSiteFlag): Используйте [`PyConfig.site_import`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.site_import) или [`PyConfig_Get("site_import")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1843 - [`Py_BytesWarningFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_BytesWarningFlag): Используйте [`PyConfig.bytes_warning`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.bytes_warning) или [`PyConfig_Get("bytes_warning")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1844 - [`Py_FrozenFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_FrozenFlag): Используйте [`PyConfig.pathconfig_warnings`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.pathconfig_warnings) или [`PyConfig_Get("pathconfig_warnings")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1845 - [`Py_IgnoreEnvironmentFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_IgnoreEnvironmentFlag): Используйте [`PyConfig.use_environment`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.use_environment) или [`PyConfig_Get("use_environment")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1846 - [`Py_DontWriteBytecodeFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_DontWriteBytecodeFlag): Используйте [`PyConfig.write_bytecode`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.write_bytecode) или [`PyConfig_Get("write_bytecode")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1847 - [`Py_NoUserSiteDirectory`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_NoUserSiteDirectory): Используйте [`PyConfig.user_site_directory`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.user_site_directory) или [`PyConfig_Get("user_site_directory")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1848 - [`Py_UnbufferedStdioFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_UnbufferedStdioFlag): Используйте [`PyConfig.buffered_stdio`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.buffered_stdio) или [`PyConfig_Get("buffered_stdio")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1849 - [`Py_HashRandomizationFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_HashRandomizationFlag): Используйте [`PyConfig.use_hash_seed`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.use_hash_seed) и [`PyConfig.hash_seed`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.hash_seed) или [`PyConfig_Get("hash_seed")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1850 - [`Py_IsolatedFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_IsolatedFlag): Используйте [`PyConfig.isolated`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.isolated) или [`PyConfig_Get("isolated")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1851 - [`Py_LegacyWindowsFSEncodingFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_LegacyWindowsFSEncodingFlag): Используйте [`PyPreConfig.legacy_windows_fs_encoding`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.legacy_windows_fs_encoding) или [`PyConfig_Get("legacy_windows_fs_encoding")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1852 - [`Py_LegacyWindowsStdioFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_LegacyWindowsStdioFlag): Используйте [`PyConfig.legacy_windows_stdio`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.legacy_windows_stdio) или [`PyConfig_Get("legacy_windows_stdio")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1853 - `Py_FileSystemDefaultEncoding`, `Py_HasFileSystemDefaultEncoding`: Используйте [`PyConfig.filesystem_encoding`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.filesystem_encoding) или [`PyConfig_Get("filesystem_encoding")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1854 - `Py_FileSystemDefaultEncodeErrors`: Используйте [`PyConfig.filesystem_errors`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.filesystem_errors) или [`PyConfig_Get("filesystem_errors")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1855 - `Py_UTF8Mode`: Используйте [`PyPreConfig.utf8_mode`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.utf8_mode) или [`PyConfig_Get("utf8_mode")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого. (см. [`Py_PreInitialize()`](https://python-all.ru/3.16/c-api/init_config.html#c.Py_PreInitialize))18561857 API [`Py_InitializeFromConfig()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_InitializeFromConfig) следует использовать с [`PyConfig`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig) для установки этих параметров. Или [`PyConfig_Get()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) можно использовать для получения этих параметров во время выполнения.1858- [`Py_UNICODE`](https://python-all.ru/3.16/c-api/unicode.html#c.Py_UNICODE), который был объявлен устаревшим в [**PEP 393**](https://python-all.ru/3.16/whatsnew/3.14.html).18591860#### Запланировано удаление в Python 3.1818611862- Следующие закрытые функции устарели и планируются к удалению в Python 3.18:18631864 - `_PyBytes_Join()`: используйте [`PyBytes_Join()`](https://python-all.ru/3.16/c-api/bytes.html#c.PyBytes_Join).1865 - `_PyDict_GetItemStringWithError()`: используйте [`PyDict_GetItemStringRef()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_GetItemStringRef).1866 - `_PyDict_Pop()`: используйте [`PyDict_Pop()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_Pop).1867 - `_PyLong_Sign()`: используйте [`PyLong_GetSign()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_GetSign).1868 - `_PyLong_FromDigits()` и `_PyLong_New()`: используйте [`PyLongWriter_Create()`](https://python-all.ru/3.16/c-api/long.html#c.PyLongWriter_Create).1869 - `_PyThreadState_UncheckedGet()`: используйте [`PyThreadState_GetUnchecked()`](https://python-all.ru/3.16/c-api/threads.html#c.PyThreadState_GetUnchecked).1870 - `_PyUnicode_AsString()`: используйте [`PyUnicode_AsUTF8()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicode_AsUTF8).1871 - `_PyUnicodeWriter_Init()`: заменить `_PyUnicodeWriter_Init(&writer)` на [`writer = PyUnicodeWriter_Create(0)`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_Create).1872 - `_PyUnicodeWriter_Finish()`: заменить `_PyUnicodeWriter_Finish(&writer)` на [`PyUnicodeWriter_Finish(writer)`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_Finish).1873 - `_PyUnicodeWriter_Dealloc()`: заменить `_PyUnicodeWriter_Dealloc(&writer)` на [`PyUnicodeWriter_Discard(writer)`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_Discard).1874 - `_PyUnicodeWriter_WriteChar()`: заменить `_PyUnicodeWriter_WriteChar(&writer, ch)` на [`PyUnicodeWriter_WriteChar(writer, ch)`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteChar).1875 - `_PyUnicodeWriter_WriteStr()`: заменить `_PyUnicodeWriter_WriteStr(&writer, str)` на [`PyUnicodeWriter_WriteStr(writer, str)`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteStr).1876 - `_PyUnicodeWriter_WriteSubstring()`: заменить `_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)` на [`PyUnicodeWriter_WriteSubstring(writer, str, start, end)`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteSubstring).1877 - `_PyUnicodeWriter_WriteASCIIString()`: заменить `_PyUnicodeWriter_WriteASCIIString(&writer, str)` на [`PyUnicodeWriter_WriteASCII(writer, str)`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteASCII).1878 - `_PyUnicodeWriter_WriteLatin1String()`: заменить `_PyUnicodeWriter_WriteLatin1String(&writer, str)` на [`PyUnicodeWriter_WriteUTF8(writer, str)`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteUTF8).1879 - `_PyUnicodeWriter_Prepare()`: (нет замены).1880 - `_PyUnicodeWriter_PrepareKind()`: (нет замены).1881 - `_Py_HashPointer()`: используйте [`Py_HashPointer()`](https://python-all.ru/3.16/c-api/hash.html#c.Py_HashPointer).1882 - `_Py_fopen_obj()`: используйте [`Py_fopen()`](https://python-all.ru/3.16/c-api/sys.html#c.Py_fopen).1883 - [`PyGen_New()`](https://python-all.ru/3.16/c-api/gen.html#c.PyGen_New): (нет замены).1884 - [`PyGen_NewWithQualName()`](https://python-all.ru/3.16/c-api/gen.html#c.PyGen_NewWithQualName): (нет замены).1885 - [`PyCoro_New()`](https://python-all.ru/3.16/c-api/coro.html#c.PyCoro_New): (нет замены).1886 - [`PyAsyncGen_New()`](https://python-all.ru/3.16/c-api/gen.html#c.PyAsyncGen_New): (нет замены).18871888 Проект [pythoncapi-compat](https://python-all.ru/3.16/whatsnew/3.14.html) можно использовать для получения этих новых открытых функций в Python 3.13 и старше. (Предложено Виктором Стиннером в [gh-128863](https://python-all.ru/3.16/whatsnew/3.14.html).)18891890#### Будет удалено в будущих версиях18911892Следующие API устарели и будут удалены, хотя на данный момент дата их удаления не назначена.18931894- [`Py_TPFLAGS_HAVE_FINALIZE`](https://python-all.ru/3.16/c-api/typeobj.html#c.Py_TPFLAGS_HAVE_FINALIZE): Не требуется начиная с Python 3.8.1895- [`PyErr_Fetch()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_Fetch): Вместо этого используйте [`PyErr_GetRaisedException()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_GetRaisedException).1896- [`PyErr_NormalizeException()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_NormalizeException): Вместо этого используйте [`PyErr_GetRaisedException()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_GetRaisedException).1897- [`PyErr_Restore()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_Restore): Вместо этого используйте [`PyErr_SetRaisedException()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_SetRaisedException).1898- [`PyModule_GetFilename()`](https://python-all.ru/3.16/c-api/module.html#c.PyModule_GetFilename): Вместо этого используйте [`PyModule_GetFilenameObject()`](https://python-all.ru/3.16/c-api/module.html#c.PyModule_GetFilenameObject).1899- [`PyOS_AfterFork()`](https://python-all.ru/3.16/c-api/sys.html#c.PyOS_AfterFork): Вместо этого используйте [`PyOS_AfterFork_Child()`](https://python-all.ru/3.16/c-api/sys.html#c.PyOS_AfterFork_Child).1900- [`PySlice_GetIndicesEx()`](https://python-all.ru/3.16/c-api/slice.html#c.PySlice_GetIndicesEx): Вместо этого используйте [`PySlice_Unpack()`](https://python-all.ru/3.16/c-api/slice.html#c.PySlice_Unpack) и [`PySlice_AdjustIndices()`](https://python-all.ru/3.16/c-api/slice.html#c.PySlice_AdjustIndices).1901- [`PyUnicode_READY()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicode_READY): Не требуется начиная с Python 3.121902- `PyErr_Display()`: Вместо этого используйте [`PyErr_DisplayException()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_DisplayException).1903- `_PyErr_ChainExceptions()`: Вместо этого используйте `_PyErr_ChainExceptions1()`.1904- Элемент `PyBytesObject.ob_shash`: вместо этого вызывайте [`PyObject_Hash()`](https://python-all.ru/3.16/c-api/object.html#c.PyObject_Hash).1905- API локального хранилища потока (TLS):19061907 - [`PyThread_create_key()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_create_key): Вместо этого используйте [`PyThread_tss_alloc()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_tss_alloc).1908 - [`PyThread_delete_key()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_delete_key): Вместо этого используйте [`PyThread_tss_free()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_tss_free).1909 - [`PyThread_set_key_value()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_set_key_value): Вместо этого используйте [`PyThread_tss_set()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_tss_set).1910 - [`PyThread_get_key_value()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_get_key_value): Вместо этого используйте [`PyThread_tss_get()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_tss_get).1911 - [`PyThread_delete_key_value()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_delete_key_value): Вместо этого используйте [`PyThread_tss_delete()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_tss_delete).1912 - [`PyThread_ReInitTLS()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_ReInitTLS): Не требуется с Python 3.7.19131914## Изменения в сборке19151916- [**PEP 776**](https://python-all.ru/3.16/whatsnew/3.14.html): Emscripten теперь официально поддерживаемая платформа на уровне [**tier 3**](https://python-all.ru/3.16/whatsnew/3.14.html). В рамках этой работы было исправлено более 25 ошибок в [libc Emscripten](https://python-all.ru/3.16/whatsnew/3.14.html). Emscripten теперь включает поддержку [`ctypes`](https://python-all.ru/3.16/library/ctypes.html#module-ctypes), [`termios`](https://python-all.ru/3.16/library/termios.html#module-termios) и [`fcntl`](https://python-all.ru/3.16/library/fcntl.html#module-fcntl), а также экспериментальную поддержку новой [интерактивной оболочки по умолчанию](https://python-all.ru/3.16/tutorial/interpreter.html#tut-interactive). (Автор: R. Hood Chatham в [gh-127146](https://python-all.ru/3.16/whatsnew/3.14.html), [gh-127683](https://python-all.ru/3.16/whatsnew/3.14.html) и [gh-136931](https://python-all.ru/3.16/whatsnew/3.14.html).)1917- Официальные бинарные сборки для Android теперь доступны на [python.org](https://python-all.ru/3.16/whatsnew/3.14.html).1918- Для генерации `configure` теперь требуется GNU Autoconf 2.72. (Автор: Erlend Aasland, [gh-115765](https://python-all.ru/3.16/whatsnew/3.14.html).)1919- `wasm32-unknown-emscripten` теперь является платформой уровня 3 [**PEP 11**](https://python-all.ru/3.16/whatsnew/3.14.html). (Авторы: R. Hood Chatham, вклады [gh-127146](https://python-all.ru/3.16/whatsnew/3.14.html), [gh-127683](https://python-all.ru/3.16/whatsnew/3.14.html) и [gh-136931](https://python-all.ru/3.16/whatsnew/3.14.html).)1920- `#pragma`-основанную компоновку с `python3*.lib` теперь можно отключить с помощью [Py\_NO\_LINK\_LIB](https://python-all.ru/3.16/extending/windows.html#c.Py_NO_LINK_LIB). (Автор: Jean-Christophe Fillion-Robin, [gh-82909](https://python-all.ru/3.16/whatsnew/3.14.html).)1921- Теперь CPython по умолчанию включает набор рекомендуемых опций компилятора для повышения безопасности. Чтобы отключить их, используйте опцию [`--disable-safety`](https://python-all.ru/3.16/using/configure.html#cmdoption-disable-safety) `configure`, или опцию [`--enable-slower-safety`](https://python-all.ru/3.16/using/configure.html#cmdoption-enable-slower-safety) для более широкого набора опций компилятора, но с потерей производительности.1922- Макрос `WITH_FREELISTS` и опция `--without-freelists` `configure` были удалены.1923- Новая опция `configure` [`--with-tail-call-interp`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-tail-call-interp) может использоваться для включения экспериментального интерпретатора с хвостовыми вызовами. Подробнее см. в разделе [Новый тип интерпретатора](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-tail-call-interpreter).1924- Чтобы отключить новую поддержку удалённой отладки, используйте опцию [`--without-remote-debug`](https://python-all.ru/3.16/using/configure.html#cmdoption-without-remote-debug) `configure`. Это может быть полезно по соображениям безопасности.1925- Приложения для iOS и macOS теперь можно настроить на перенаправление содержимого `stdout` и `stderr` в системный журнал. (Автор: Russell Keith-Magee, [gh-127592](https://python-all.ru/3.16/whatsnew/3.14.html).)1926- Тестовый стенд для iOS теперь может передавать результаты тестов в потоковом режиме во время выполнения теста. Стенд также можно использовать для запуска тестовых наборов проектов, отличных от самого CPython. (Автор: Russell Keith-Magee, [gh-127592](https://python-all.ru/3.16/whatsnew/3.14.html).)19271928### `build-details.json`19291930Установки Python теперь содержат новый файл `build-details.json`. Это статический JSON-документ с деталями сборки CPython, позволяющий выполнять интроспекцию без необходимости запуска кода. Это полезно для таких сценариев использования, как загрузчики Python, кросс-компиляция и т.д.19311932`build-details.json` должен быть установлен в платформонезависимый каталог стандартной библиотеки. Это соответствует пути установки [‘stdlib’](https://python-all.ru/3.16/library/sysconfig.html#installation-paths) [`sysconfig`](https://python-all.ru/3.16/library/sysconfig.html#module-sysconfig), который можно найти, выполнив `sysconfig.get_path('stdlib')`.19331934> **См. также**1935>1936> [**PEP 739**](https://python-all.ru/3.16/whatsnew/3.14.html) – `build-details.json` 1.0 – статический файл описания деталей сборки Python19371938### Прекращение поддержки PGP-подписей19391940PGP-подписи (Pretty Good Privacy) не будут предоставляться для релизов Python 3.14 и последующих версий. Для проверки артефактов CPython пользователи должны использовать [материалы верификации Sigstore](https://python-all.ru/3.16/whatsnew/3.14.html). Начиная с Python 3.11, релизы подписываются с помощью [Sigstore](https://python-all.ru/3.16/whatsnew/3.14.html).19411942Это изменение в процессе выпуска было описано в [**PEP 761**](https://python-all.ru/3.16/whatsnew/3.14.html).19431944### Free-threaded Python официально поддерживается19451946Free-threaded сборка Python теперь поддерживается и больше не является экспериментальной. Это начало [фазы II](https://python-all.ru/3.16/whatsnew/3.14.html), в которой free-threaded Python официально поддерживается, но остаётся опциональным.19471948Команда free-threading уверена, что проект движется в правильном направлении, и благодарит всех за постоянную самоотдачу в работе над тем, чтобы сделать free-threading готовым к более широкому внедрению в сообществе Python.19491950С учётом этих рекомендаций и принятия данного PEP, сообщество разработчиков Python должно широко сообщить, что free-threading является поддерживаемой опцией сборки Python сейчас и в будущем, и что она не будет удалена без соответствующего графика устаревания.19511952Любое решение о переходе к [фазе III](https://python-all.ru/3.16/whatsnew/3.14.html), когда free-threading станет сборкой Python по умолчанию или единственной, пока не принято и зависит от многих факторов как внутри самого CPython, так и в сообществе. Это решение – дело будущего.19531954> **См. также**1955>1956> [**PEP 779**](https://python-all.ru/3.16/whatsnew/3.14.html)1957>1958> [Принятие PEP 779](https://python-all.ru/3.16/whatsnew/3.14.html)19591960### Бинарные сборки экспериментального JIT-компилятора19611962Официальные бинарные сборки для macOS и Windows теперь включают *экспериментальный* JIT-компилятор. Хотя он **не** рекомендуется для использования в продакшене, его можно протестировать, установив переменную окружения [`PYTHON_JIT=1`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_JIT). Сборщики из исходников и редистрибьюторы могут использовать опцию конфигурации [`--enable-experimental-jit=yes-off`](https://python-all.ru/3.16/using/configure.html#cmdoption-enable-experimental-jit) для аналогичного поведения.19631964JIT находится на ранней стадии и всё ещё активно разрабатывается. Поэтому типичное влияние на производительность при его включении может составлять от -10% (медленнее) до +20% (быстрее) в зависимости от нагрузки. Для помощи в тестировании и оценке предоставлен набор функций интроспекции в пространстве имён [`sys._jit`](https://python-all.ru/3.16/library/sys.html#sys._jit). [`sys._jit.is_available()`](https://python-all.ru/3.16/library/sys.html#sys._jit.is_available) можно использовать, чтобы определить, поддерживает ли текущий исполняемый файл JIT-компиляцию, а [`sys._jit.is_enabled()`](https://python-all.ru/3.16/library/sys.html#sys._jit.is_enabled) – чтобы узнать, включена ли JIT-компиляция для текущего процесса.19651966В настоящее время самая значительная отсутствующая функциональность – это то, что нативные отладчики и профилировщики, такие как `gdb` и `perf`, не могут разворачивать стек через JIT-фреймы (отладчики и профилировщики Python, такие как [`pdb`](https://python-all.ru/3.16/library/pdb.html#module-pdb) или [`profile`](https://python-all.ru/3.16/library/profile.html#module-profile), продолжают работать без изменений). Free-threaded сборки не поддерживают JIT-компиляцию.19671968Пожалуйста, сообщайте о любых ошибках или серьёзных регрессиях производительности, с которыми вы столкнётесь!19691970> **См. также**1971>1972> [**PEP 744**](https://python-all.ru/3.16/whatsnew/3.14.html)19731974## Портирование на Python 3.1419751976В этом разделе перечислены ранее описанные изменения и другие исправления ошибок, которые могут потребовать изменений в вашем коде.19771978### Изменения в Python API19791980- На платформах Unix, отличных от macOS, *forkserver* теперь является методом запуска по умолчанию [метод запуска](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing-start-methods) для [`multiprocessing`](https://python-all.ru/3.16/library/multiprocessing.html#module-multiprocessing) и [`ProcessPoolExecutor`](https://python-all.ru/3.16/library/concurrent.futures.html#concurrent.futures.ProcessPoolExecutor) вместо *fork*.19811982 Подробнее см. [(1)](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-concurrent-futures-start-method) и [(2)](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-multiprocessing-start-method).19831984 Если вы столкнетесь с [`NameError`](https://python-all.ru/3.16/library/exceptions.html#NameError) или ошибками pickling, возникающими из [`multiprocessing`](https://python-all.ru/3.16/library/multiprocessing.html#module-multiprocessing) или [`concurrent.futures`](https://python-all.ru/3.16/library/concurrent.futures.html#module-concurrent.futures), обратитесь к [ограничениям forkserver](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing-programming-forkserver).19851986 Это изменение не затрагивает Windows или macOS, где [‘spawn’](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing-start-method-spawn) остаётся методом запуска по умолчанию.1987- [`functools.partial`](https://python-all.ru/3.16/library/functools.html#functools.partial) теперь является дескриптором метода. Оберните его в [`staticmethod()`](https://python-all.ru/3.16/library/functions.html#staticmethod), чтобы сохранить старое поведение. (Авторы: Serhiy Storchaka и Dominykas Grigonis, [gh-121027](https://python-all.ru/3.16/whatsnew/3.14.html).)1988- [Сборщик мусора теперь инкрементальный](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-incremental-gc), что означает, что поведение [`gc.collect()`](https://python-all.ru/3.16/library/gc.html#gc.collect) немного изменяется:19891990 - `gc.collect(1)`: выполняет инкремент сборки мусора, а не сбор поколения 1.1991 - Другие вызовы `gc.collect()` не изменились.1992- Функция [`locale.nl_langinfo()`](https://python-all.ru/3.16/library/locale.html#locale.nl_langinfo) теперь временно устанавливает локаль `LC_CTYPE` в некоторых случаях. Это временное изменение затрагивает другие потоки. (Автор: Serhiy Storchaka, [gh-69998](https://python-all.ru/3.16/whatsnew/3.14.html).)1993- [`types.UnionType`](https://python-all.ru/3.16/library/types.html#types.UnionType) теперь является псевдонимом для [`typing.Union`](https://python-all.ru/3.16/library/typing.html#typing.Union), что приводит к изменениям в некоторых поведениях. Подробнее см. [выше](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-typing-union). (Автор: Jelle Zijlstra, [gh-105499](https://python-all.ru/3.16/whatsnew/3.14.html).)1994- Поведение аннотаций во время выполнения изменилось в различных аспектах; подробнее см. [выше](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-deferred-annotations). Хотя большая часть кода, взаимодействующего с аннотациями, должна продолжать работать, некоторые недокументированные детали могут вести себя иначе.1995- В рамках публикации CLI [`mimetypes`](https://python-all.ru/3.16/library/mimetypes.html#module-mimetypes), теперь он завершается с `1` при ошибке вместо `0` и с `2` при неверных параметрах командной строки вместо `1`. Сообщения об ошибках теперь выводятся в stderr.1996- Шаблон `\B` в регулярных выражениях теперь соответствует пустой строке, если указан как весь шаблон, что может вызвать изменения в поведении.1997- На FreeBSD [`sys.platform`](https://python-all.ru/3.16/library/sys.html#sys.platform) больше не содержит номер основной версии.19981999### Изменения в аннотациях ([**PEP 649**](https://python-all.ru/3.16/whatsnew/3.14.html) и [**PEP 749**](https://python-all.ru/3.16/whatsnew/3.14.html))20002001В этом разделе содержатся рекомендации по изменениям, которые могут потребоваться для аннотаций или кода Python, взаимодействующего с аннотациями или проводящего их интроспекцию, в связи с изменениями, связанными с [отложенным вычислением аннотаций](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-deferred-annotations).20022003В большинстве случаев работающий код из более старых версий Python не потребует никаких изменений.20042005#### Последствия для аннотированного кода20062007Если вы определяете аннотации в своём коде (например, для использования со статическим проверщиком типов), то это изменение, вероятно, вас не затронет: вы можете продолжать писать аннотации так же, как и в предыдущих версиях Python.20082009Вероятно, вы сможете удалить строки в кавычках в аннотациях, которые часто используются для прямых ссылок. Аналогично, если вы используете `from __future__ import annotations`, чтобы избежать написания строк в аннотациях, вы, вероятно, сможете удалить этот импорт, как только будете поддерживать только Python 3.14 и новее. Однако, если вы полагаетесь на сторонние библиотеки, которые читают аннотации, этим библиотекам могут потребоваться изменения для поддержки аннотаций без кавычек, прежде чем они начнут работать как ожидается.20102011#### Последствия для читателей `__annotations__`20122013Если ваш код читает атрибут [`__annotations__`](https://python-all.ru/3.16/reference/datamodel.html#object.__annotations__) у объектов, вам, возможно, потребуется внести изменения, чтобы поддерживать код, который полагается на отложенное вычисление аннотаций. Например, вы можете использовать [`annotationlib.get_annotations()`](https://python-all.ru/3.16/library/annotationlib.html#annotationlib.get_annotations) с форматом [`FORWARDREF`](https://python-all.ru/3.16/library/annotationlib.html#annotationlib.Format.FORWARDREF), как это теперь делает модуль [`dataclasses`](https://python-all.ru/3.16/library/dataclasses.html#module-dataclasses).20142015Внешний пакет [typing\_extensions](https://python-all.ru/3.16/whatsnew/3.14.html) предоставляет частичные обратные переносы некоторой функциональности модуля [`annotationlib`](https://python-all.ru/3.16/library/annotationlib.html#module-annotationlib), такие как перечисление [`Format`](https://python-all.ru/3.16/library/annotationlib.html#annotationlib.Format) и функция [`get_annotations()`](https://python-all.ru/3.16/library/annotationlib.html#annotationlib.get_annotations). Их можно использовать для написания кода, работающего в разных версиях и использующего новое поведение в Python 3.14.20162017#### Связанные изменения20182019Изменения в Python 3.14 предназначены для переработки того, как `__annotations__` работает во время выполнения, при минимизации нарушений в коде, содержащем аннотации в исходном коде, и в коде, который читает `__annotations__`. Однако, если вы полагаетесь на недокументированные детали поведения аннотаций или на частные функции в стандартной библиотеке, есть много способов, которыми ваш код может не работать в Python 3.14. Чтобы защитить свой код от будущих изменений, используйте только документированную функциональность модуля [`annotationlib`](https://python-all.ru/3.16/library/annotationlib.html#module-annotationlib).20202021В частности, не читайте аннотации напрямую из атрибута словаря пространства имён объектов типа. Используйте [`annotationlib.get_annotate_from_class_namespace()`](https://python-all.ru/3.16/library/annotationlib.html#annotationlib.get_annotate_from_class_namespace) во время конструирования класса и [`annotationlib.get_annotations()`](https://python-all.ru/3.16/library/annotationlib.html#annotationlib.get_annotations) после.20222023В предыдущих версиях иногда можно было получить доступ к аннотациям класса из экземпляра аннотированного класса. Это поведение было недокументированным и случайным, и больше не будет работать в Python 3.14.20242025#### `from __future__ import annotations`20262027В Python 3.7 [**PEP 563**](https://python-all.ru/3.16/whatsnew/3.14.html) представил `from __future__ import annotations` [future-инструкцию](https://python-all.ru/3.16/reference/simple_stmts.html#future), которая превращает все аннотации в строки.20282029Однако эта инструкция теперь устарела и, как ожидается, будет удалена в будущей версии Python. Это удаление не произойдет до тех пор, пока Python 3.13 не достигнет конца своего жизненного цикла в 2029 году, будучи последней версией Python без поддержки отложенного вычисления аннотаций.20302031В Python 3.14 поведение кода, использующего `from __future__ import annotations`, не изменилось.20322033### Изменения в C API20342035- [`Py_Finalize()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_Finalize) теперь удаляет все интернированные строки. Это нарушает обратную совместимость с любым C-расширением, которое удерживает интернированную строку после вызова `Py_Finalize()` и затем повторно используется после вызова [`Py_Initialize()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_Initialize). Любые проблемы, возникающие из-за этого поведения, обычно приводят к аварийным завершениям во время выполнения последующего вызова `Py_Initialize()` при доступе к неинициализированной памяти. Для исправления используйте санитайзер адресов, чтобы выявить любое использование после освобождения, связанное с интернированной строкой, и освободите её при завершении модуля. (Автор: Eddie Elizondo, [gh-113601](https://python-all.ru/3.16/whatsnew/3.14.html).)2036- Теперь C API [Unicode Exception Objects](https://python-all.ru/3.16/c-api/exceptions.html#unicodeexceptions) генерирует [`TypeError`](https://python-all.ru/3.16/library/exceptions.html#TypeError), если его аргумент исключения не является объектом [`UnicodeError`](https://python-all.ru/3.16/library/exceptions.html#UnicodeError). (Автор: Bénédikt Tran в [gh-127691](https://python-all.ru/3.16/whatsnew/3.14.html).)20372038- Интерпретатор внутренне избегает некоторых изменений счётчика ссылок при загрузке объектов в стек операндов путём [заимствования](https://python-all.ru/3.16/glossary.html#term-borrowed-reference) ссылок, когда это возможно. Это может привести к меньшим значениям счётчика ссылок по сравнению с предыдущими версиями Python. Расширения C API, которые проверяли [`Py_REFCNT()`](https://python-all.ru/3.16/c-api/refcounting.html#c.Py_REFCNT) объекта `1`, чтобы определить, не ссылается ли на аргумент функции другой код, должны вместо этого использовать [`PyUnstable_Object_IsUniqueReferencedTemporary()`](https://python-all.ru/3.16/c-api/object.html#c.PyUnstable_Object_IsUniqueReferencedTemporary) как более безопасную замену.2039- Приватные функции, повышенные до публичных C API:20402041 - `_PyBytes_Join()`: [`PyBytes_Join()`](https://python-all.ru/3.16/c-api/bytes.html#c.PyBytes_Join)2042 - `_PyLong_IsNegative()`: [`PyLong_IsNegative()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_IsNegative)2043 - `_PyLong_IsPositive()`: [`PyLong_IsPositive()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_IsPositive)2044 - `_PyLong_IsZero()`: [`PyLong_IsZero()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_IsZero)2045 - `_PyLong_Sign()`: [`PyLong_GetSign()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_GetSign)2046 - `_PyUnicodeWriter_Dealloc()`: [`PyUnicodeWriter_Discard()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_Discard)2047 - `_PyUnicodeWriter_Finish()`: [`PyUnicodeWriter_Finish()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_Finish)2048 - `_PyUnicodeWriter_Init()`: используйте [`PyUnicodeWriter_Create()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_Create)2049 - `_PyUnicodeWriter_Prepare()`: (замены нет)2050 - `_PyUnicodeWriter_PrepareKind()`: (замены нет)2051 - `_PyUnicodeWriter_WriteChar()`: [`PyUnicodeWriter_WriteChar()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteChar)2052 - `_PyUnicodeWriter_WriteStr()`: [`PyUnicodeWriter_WriteStr()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteStr)2053 - `_PyUnicodeWriter_WriteSubstring()`: [`PyUnicodeWriter_WriteSubstring()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteSubstring)2054 - `_PyUnicode_EQ()`: [`PyUnicode_Equal()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicode_Equal)2055 - `_PyUnicode_Equal()`: [`PyUnicode_Equal()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicode_Equal)2056 - `_Py_GetConfig()`: [`PyConfig_Get()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) и [`PyConfig_GetInt()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_GetInt)2057 - `_Py_HashBytes()`: [`Py_HashBuffer()`](https://python-all.ru/3.16/c-api/hash.html#c.Py_HashBuffer)2058 - `_Py_fopen_obj()`: [`Py_fopen()`](https://python-all.ru/3.16/c-api/sys.html#c.Py_fopen)2059 - `PyMutex_IsLocked()` : [`PyMutex_IsLocked()`](https://python-all.ru/3.16/c-api/synchronization.html#c.PyMutex_IsLocked)20602061 Проект [pythoncapi-compat](https://python-all.ru/3.16/whatsnew/3.14.html) можно использовать для получения большинства этих новых функций в Python 3.13 и старше.20622063## Заметные изменения в 3.14.520642065### gc20662067- Инкрементальный сборщик мусора, поставлявшийся в Python 3.14.0–3.14.4, был заменён обратно на поколенческий сборщик мусора из версии 3.13 из-за ряда [сообщений](https://python-all.ru/3.16/whatsnew/3.14.html) о значительном давлении на память в производственных средах. Подробнее см. в [Garbage collection](https://python-all.ru/3.16/whatsnew/3.14.html#whatsnew314-incremental-gc).2068