파이썬 3.14의 새로운 기능에 대해 알아봅시다
*******************************************

편집자:
   Adam Turner and Hugo van Kemenade

해당하는 문서는 파이썬 3.13과 비교했을 때 파이썬 3.14의 새로운 기능들
을 설명합니다. 파이썬 3.14는 2025년 10월 7일에 배포되었습니다. 배포와
관련된 전체 기록을 열람하시려면, 자세한 내용은 변경 로그를 확인해주시
기를 부탁드립니다.

더 보기: **PEP 745** -- 파이썬 3.14 릴리스 일정


요약 -- 주요 업데이트
=====================

Python 3.14 is a stable release of the Python programming language,
with a mix of changes to the language, the implementation, and the
standard library. The biggest changes include template string
literals, deferred evaluation of annotations, and support for
subinterpreters in the standard library.

라이브러리 변경 사항에는 asyncio에서의 인트로스펙션 기능의 대폭적인 개
선, 새로운 "compression.zstd" 모듈을 통한 Zstandard 지원, REPL에서의
문법 강조, 일반적인 폐지 예정 및 제거, 사용자 친화성과 정확성 개선이
포함됩니다.

해당하는 업데이트 문서는 모든 새로운 기능에 대한 완전한 명세를 제공하
려는 것이 아니라, 편리한 개요를 제공합니다. 자세한 내용은 라이브러리
참조 및 언어 참조 같은 설명서를 참조해주시기를 부탁드립니다. 변경 사항
의 전체 구현과 설계 근거를 이해하려면 특정 새 기능에 대한 PEP를 참조해
주시기를 부탁드립니다. 다만 PEP는 통상적으로 해당하는 기능이 구현되고
난 이후에는 최신 상태로 유지되지 않습니다. 이전 파이썬 버전에서 업그레
이드(혹은 이식)하는 방법은 Porting to Python 3.14를 참조해주시기를 부
탁드립니다.

======================================================================

인터프리터의 개선:

* **PEP 649** 및 **PEP 749**: 어노테이션의 지연 평가

* **PEP 734**: 표준 라이브러리의 여러 인터프리터

* **PEP 750**: 템플릿 문자열

* **PEP 758**: 괄호 없는 except 및 except* 표현식 허용

* **PEP 765**: finally 블록의 제어 흐름

* **PEP 768**: CPython을 위한 안전한 외부 디버거 인터페이스

* 새로운 형의 인터프리터

* 자유 스레딩 모드 개선 사항

* 개선된 에러 메세지

* 점진적인 가비지 수거

표준 라이브러리의 중요한 개선 사항들:

* **PEP 784**: 표준 라이브러리의 Zstandard 지원

* Asyncio의 인트로스펙션 기능

* 동시성 안전 경고 제어

* 기본 대화형 셸의 문법 강조 및 여러 표준 라이브러리 CLI의 색상 출력

C API 개선 사항들:

* **PEP 741**: 파이썬 구성 C API

플랫폼 지원:

* **PEP 776**: Emscripten은 이제 공식 지원 플랫폼이며, **3단계 (Tier
  3)**에 해당합니다.

릴리스 변경 사항들:

* **PEP 779**: 자유 스레딩의 파이썬이 공식적으로 지원됩니다

* **PEP 761**: 공식 릴리스의 PGP 서명이 중단되었습니다

* 윈도우 및 macOS 바이너리 릴리스가 이제 실험적 JIT (just-in-time) 컴
  파일러를 지원합니다

* Android용 바이너리 릴리스가 이제 제공됩니다


새로운 기능들
=============


**PEP 649** 및 **PEP 749**: 어노테이션의 지연 평가
--------------------------------------------------

함수, 클래스, 모듈의 *어노테이션*은 더 이상 즉시 평가되지 않습니다. 대
신 어노테이션은 특수 목적의 *어노테이트 함수*에 저장되며, 필요한 경우
에만 평가됩니다 (*from __future__ import annotations*가 사용되는 경우
는 제외합니다).

해당하는 변경 사항은 대부분의 상황에서 파이썬 어노테이션의 성능과 사용
성을 향상시키도록 설계되었습니다. 어노테이션을 정의할 때의 런타임 비용
이 최소화되지만, 런타임에 어노테이션을 인트로스펙션하는 것은 여전히 가
능합니다. 어노테이션에 전방 참조가 포함된 경우 더 이상 어노테이션을 문
자열로 감싸주시지 않으셔도 됩니다.

새로운 "annotationlib" 모듈은 지연된 어노테이션을 검사하기 위한 도구를
제공합니다. 어노테이션은 (이전 파이썬 버전의 동작과 비슷하게 어노테이
션을 런타임 값으로 평가하는) "VALUE" 형식, (정의되지 않은 이름을 특수
마커로 대체하는) "FORWARDREF" 형식, (어노테이션을 문자열로 반환하는)
"STRING" 형식으로 평가할 수 있습니다.

다음과 같은 예시는 이러한 형식들이 어떻게 동작하는지 보여줍니다:

   >>> from annotationlib import get_annotations, Format
   >>> def func(arg: Undefined):
   ...     pass
   >>> get_annotations(func, format=Format.VALUE)
   Traceback (most recent call last):
     ...
   NameError: name 'Undefined' is not defined
   >>> get_annotations(func, format=Format.FORWARDREF)
   {'arg': ForwardRef('Undefined', owner=<function func at 0x...>)}
   >>> get_annotations(func, format=Format.STRING)
   {'arg': 'Undefined'}

이러한 변경으로 인해 필요할 수 있는 수정 사항에 대한 지침은 (코드) 이
식 섹션에 포함되어 있습니다. 대부분의 경우에는 코드가 그대로 계속 작동
합니다.

(Jelle Zijlstra가 **PEP 749** 및 gh-119180를 통해 기능을 구현하였습니
다. **PEP 649**는 Larry Hastings가 작성하였습니다.)

더 보기:

  **PEP 649**
     디스크립터를 사용한 어노테이션의 지연 평가

  **PEP 749**
     PEP 649 구현


**PEP 734**: 표준 라이브러리의 여러 인터프리터
----------------------------------------------

CPython 런타임은 동일한 프로세스에서 여러 파이썬 복사본을 동시에 실행
하는 것을 지원하며, 20년 넘게 이를 지원해 왔습니다. 이러한 별도의 복사
본 각각을 '인터프리터'라고 부릅니다. 그러나 이 기능은 이전까지 C-API를
통해서만 사용할 수 있었습니다.

해당하는 제한 사항은 파이썬 3.14에서 새로운 "concurrent.interpreters"
모듈을 통해 제거되었습니다.

여러 인터프리터를 사용하는 것이 상당한 이점을 갖는 주목할 만한 이유는
적어도 두 가지가 있습니다:

* 파이썬에 새로 도입되는, 사람이 다루기 쉬운 동시성 모델을 지원합니다

* 진정한 다중 코어 병렬성

일부 사용 사례에서는 소프트웨어의 동시성이 효율성을 높이고 고수준에서
설계를 단순화할 수 있습니다. 동시에, 가장 단순한 동시성을 제외한 모든
동시성을 구현하고 유지하는 일은 인간의 두뇌에는 종종 어려운 과제입니다
. 이는 모든 메모리가 모든 스레드 사이에서 공유되는 일반 스레드(예를 들
어, "threading")에 특히 적용됩니다.

여러 격리된 인터프리터를 사용하면 Smalltalk, Erlang, Haskell, Go와 같
은 다른 프로그래밍 언어에서 성공을 거둔 통신 순차 프로세스
(Communicating Sequential Processes, CSP)나 액터 모델 같은 동시성 모델
부류를 활용할 수 있습니다. 여러 인터프리터는 스레드와 비슷하지만 공유
는 선택적으로 활성화하는 방식이라고 생각할 수 있습니다.

다중 코어 병렬성과 관련해서는, 파이썬 3.12부터 인터프리터가 서로 충분
히 격리되어 병렬로 사용할 수 있게 되었습니다(**PEP 684**를 참조해주시
기를 부탁드립니다). 이는 *GIL*로 인해 제한되었던 파이썬의 다양한 CPU
집약적 사용 사례를 열어 줍니다.

여러개의 인터프리터를 사용하는 것은 "multiprocessing"과 여러 면에서 비
슷합니다. 둘 다 기본적으로 공유하지 않으면서 병렬로 실행할 수 있는 격
리된 논리적 "프로세스"를 제공하기 때문입니다. 그러나 여러개의 인터프리
터를 사용할 때 응용 프로그램은 더 적은 시스템 자원을 사용하고 더 효율
적으로 동작합니다(동일한 프로세스 안에 머무르기 때문입니다). 여러개의
인터프리터는 프로세스의 격리성과 스레드의 효율성을 함께 갖는 것으로 생
각할 수 있습니다.

해당하는 기능은 수십 년 동안 존재해 왔지만, 낮은 인지도와 표준 라이브
러리 모듈의 부재로 인해 여러 인터프리터는 널리 사용되지 않았습니다. 따
라서 현재 몇 가지 주목할 만한 제한 사항이 있으며, 이제 해당하는 기능이
주류로 편입되고 있으므로 이와 같은 제한 사항은 크게 개선될 것으로 예상
됩니다.

현재의 제한 사항들:

* 각각의 인터프리터를 시작하는 과정은 아직 최적화되지 않았습니다

* 각각의 인터프리터가 필요한 것보다 더 많은 메모리를 사용합니다(인터프
  리터 간 광범위한 내부 공유 작업은 계속 진행 중입니다).

* 인터프리터 간에 객체나 다른 데이터를 실제로 공유하기 위한 옵션은
  ("memoryview"를 제외하고) *아직* 많지 않습니다

* PyPI의 많은 제삼자 확장 모듈은 아직 여러 인터프리터와 호환되지 않습
  니다(모든 표준 라이브러리 확장 모듈은 *호환됩니다*)

* 현재로서는 여러 격리된 인터프리터를 사용하는 응용 프로그램을 작성하
  는 접근 방식이 파이썬 사용자에게 대체로 익숙하지 않습니다

이러한 제한 사항의 영향은 향후 CPython 개선 사항, 인터프리터가 사용되
는 방식, 그리고 커뮤니티가 PyPI 패키지를 통해 해결하는 내용에 따라 달
라질 것입니다. 사용 사례에 따라서는 제한 사항이 큰 영향을 미치지 않을
수 있으므로, 직접 시도해보시기를 권장드립니다!

또한 향후 CPython 릴리스에서는 오버헤드를 줄이거나 제거하고 PyPI에 두
기에는 덜 적절한 유틸리티를 제공할 것입니다. 그동안 대부분의 제한 사항
은 확장 모듈을 통해서도 해결할 수 있습니다. 즉, PyPI 패키지는 3.14의
공백을 메울 수 있으며, 인터프리터가 마침내 제대로 격리되어 *GIL*을 공
유하지 않게 된 3.12까지도 지원 범위를 넓힐 수 있습니다. 마찬가지로 인
터프리터 위에 고수준 추상화를 제공하는 PyPI 라이브러리들이 등장할 것으
로 예상됩니다.

확장 모듈과 관련해서는 일부 PyPI 프로젝트뿐만 아니라 Cython, pybind11,
nanobind, PyO3와 같은 도구를 업데이트하는 작업이 진행 중입니다. 확장
모듈을 격리하는 절차는 Isolating Extension Modules에 설명되어 있습니다
. 모듈을 격리하는 일은 자유 스레딩을 지원하는 데 필요한 사항과 많은 부
분이 겹치므로, 해당 분야에서 커뮤니티가 진행 중인 작업은 여러 인터프리
터 지원을 가속화하는 데 도움이 될 것입니다.

3.14에 추가된 또 다른 항목:
concurrent.futures.InterpreterPoolExecutor.

(Eric Snow가 gh-134939를 통해 기능을 구현하였습니다.)

더 보기: **PEP 734**


**PEP 750**: 템플릿 문자열 리터럴
---------------------------------

템플릿 문자열은 커스텀 문자열 처리를 위한 새로운 메커니즘입니다. 템플
릿 문자열은 f-문자열의 익숙한 문법을 공유하지만, f-문자열과 달리 단순
한 "str" 대신 문자열의 정적 부분과 보간된 부분을 나타내는 객체를 반환
합니다.

t-문자열을 작성하려면 *'f'* 대신 *'t'* 접두사를 사용합니다:

   >>> variety = 'Stilton'
   >>> template = t'Try some {variety} cheese!'
   >>> type(template)
   <class 'string.templatelib.Template'>

"Template" 객체는 문자열의 정적 부분과 (중괄호 안의) 보간된 부분이 결
합되기 *전에* 그 부분들에 액세스할 수 있도록 합니다. 각 부분에 순서대
로 액세스하려면 "Template" 인스턴스를 이터레이션합니다:

   >>> list(template)
   ['Try some ', Interpolation('Stilton', 'variety', None, ''), ' cheese!']

"Template" 인스턴스를 처리하는 코드는 작성하거나 호출하기 쉽습니다. 예
를 들어, 정적 부분은 소문자로 렌더링하고 "Interpolation" 인스턴스는 대
문자로 렌더링하는 함수는 다음과 같습니다:

   from string.templatelib import Interpolation

   def lower_upper(template):
       """Render static parts lowercase and interpolations uppercase."""
       parts = []
       for part in template:
           if isinstance(part, Interpolation):
               parts.append(str(part.value).upper())
           else:
               parts.append(part.lower())
       return ''.join(parts)

   name = 'Wenslydale'
   template = t'Mister {name}'
   assert lower_upper(template) == 'mister WENSLYDALE'

"Template" 인스턴스는 런타임에 정적 문자열과 보간을 구분하므로 사용자
입력을 정제하는 데 유용할 수 있습니다. HTML에서 사용자 입력을 이스케이
프하는 "html()" 함수를 작성하는 일은 독자에게 남겨진 연습 과제로 봐주
시기를 부탁드립니다! 템플릿 처리 코드는 향상된 유연성을 제공할 수 있습
니다. 예를 들어, 더 고급의 "html()" 함수는 템플릿 안에서 HTML 어트리뷰
트가 담긴 "dict" 객체를 직접 받을 수 있습니다:

   attributes = {'src': 'limburger.jpg', 'alt': 'lovely cheese'}
   template = t'<img {attributes}>'
   assert html(template) == '<img src="limburger.jpg" alt="lovely cheese" />'

물론 템플릿 처리 코드는 문자열과 유사한 결과를 반환할 필요가 없습니다.
훨씬 *더* 고급의 "html()" 함수는 DOM과 유사한 구조를 나타내는 커스텀
형을 반환할 수 있습니다.

t-문자열을 사용하면 개발자는 SQL을 정제하고, 안전한 셸 연산을 만들고,
로깅을 개선하고, 웹 개발의 현대적인 아이디어(HTML, CSS 등)를 다루며,
가벼운 커스텀 비즈니스 DSL을 구현하는 시스템을 작성할 수 있습니다.

(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를 통해 기능을 구현하였습니다.)

더 보기: **PEP 750**.


**PEP 768**: 안전한 외부 디버거 인터페이스
------------------------------------------

파이썬 3.14는 디버거와 프로파일러가 실행 중인 파이썬 프로세스에 중단이
나 재시작 없이 안전하게 연결할 수 있는 오버헤드가 없는 디버깅 인터페이
스를 도입합니다. 이는 파이썬의 디버깅 기능을 크게 개선한 것으로, 안전
하지 않은 대안이 더 이상 필요하지 않다는 의미입니다.

해당하는 새로운 인터페이스는 인터프리터의 정상 실행 경로를 수정하지 않
고, 런타임에 어떠한 오버헤드도 추가하지 않으면서 디버거 코드를 연결하
기 위한 안전한 실행 지점을 제공합니다. 이를 통해 도구는 이제 파이썬 응
용 프로그램을 실시간으로 검사하고 상호 작용할 수 있으며, 해당하는 기능
은 고가용성 시스템과 프로덕션 환경에서 중요한 기능입니다.

편의를 위해 해당하는 인터페이스는 "sys.remote_exec()" 함수로 구현되었
습니다. 예를 들어, 다음과 같습니다:

   import sys
   from tempfile import NamedTemporaryFile

   with NamedTemporaryFile(mode='w', suffix='.py', delete=False) as f:
       script_path = f.name
       f.write(f'import my_debugger; my_debugger.connect({os.getpid()})')

   # Execute in process with PID 1234
   print('Behold! An offering:')
   sys.remote_exec(1234, script_path)

해당하는 함수는 다음 안전한 실행 지점에서 대상 프로세스 안에서 실행될
파이썬 코드를 보낼 수 있게 합니다. 그러나 도구 작성자는 PEP에 설명된
대로 프로토콜을 직접 구현할 수도 있습니다. 해당하는 PEP는 실행 중인 프
로세스에 안전하게 연결하는 데 사용되는 기반 메커니즘을 자세히 설명합니
다.

디버깅 인터페이스는 보안을 염두에 두고 신중하게 설계되었으며, 액세스를
제어하는 여러 메커니즘을 포함합니다:

* "PYTHON_DISABLE_REMOTE_DEBUG" 환경 변수.

* "-X disable-remote-debug" 명령줄 옵션.

* 빌드 시 해당하는 기능을 완전히 비활성화하기 위한 "--without-remote-
  debug" 구성 플래그.

(Pablo Galindo Salgado, Matt Wozniski, 그리고 Ivona Stojanovic이
gh-131591를 통해 기능을 구현하였습니다.)

더 보기: **PEP 768**.


새로운 형의 인터프리터
----------------------

CPython에 새로운 형의 인터프리터가 추가되었습니다. 이 인터프리터는 하
나의 큰 C *case* 문장 대신, 개별 파이썬 opcode를 구현하는 작은 C 함수
들 사이의 꼬리 호출을 사용합니다. 특정 최신 컴파일러에서는 해당하는 인
터프리터가 상당히 더 나은 성능을 제공합니다. 예비 벤치마크에 따르면 플
랫폼과 아키텍처에 따라 표준 *pyperformance* 벤치마크 스위트에서 기하
평균 기준으로 3-5% 더 빠른 것으로 보입니다. 기준선은 이 새로운 인터프
리터 없이 Clang 19로 빌드한 파이썬 3.14입니다.

해당하는 인터프리터는 현재 x86-64 및 AArch64 아키텍처에서 Clang 19 이
상에서만 동작합니다. 그러나 향후 GCC 릴리스에서도 이를 지원할 것으로
예상됩니다.

This feature is opt-in for now. Enabling profile-guided optimization
is highly recommended when using the new interpreter as it is the only
configuration that has been tested and validated for improved
performance. For further information, see "--with-tail-call-interp".

참고:

  이를 현재 CPython에서 구현되지 않은 파이썬 함수의 꼬리 호출 최적화와
  혼동해서는 안 됩니다.해당하는 새로운 인터프리터 형은 CPython 인터프
  리터의 내부 구현 세부 사항입니다. 파이썬 프로그램의 외부에 드러나는
  동작은 전혀 변경하지 않습니다. 성능을 향상시킬 수는 있지만, 이외의
  그 무엇도 변경되지 않습니다.

(Ken Jin이 gh-128563를 통해 기능을 구현하였으며, Mark Shannon, Garrett
Gu, Haoran Xu, 그리고 Josh Haberman이 이 기능을 CPython에 구현하는 방
법에 대한 아이디어를 제공하였습니다.)


자유 스레딩 모드의 개선 사항들
------------------------------

3.13에서 처음 추가된 CPython의 자유 스레딩 모드(**PEP 703**)는 파이썬
3.14에서 크게 개선되었습니다. C API 변경 사항을 포함하여 PEP 703에 설
명된 구현이 완료되었고, 인터프리터의 임시 우회책은 더 영구적인 해결책
으로 대체되었습니다. 특수화 적응형 인터프리터(**PEP 659**)가 이제 자유
스레딩 모드에서 활성화되었으며, 여러 다른 최적화와 함께 해당 모드의 성
능을 크게 개선합니다. 자유 스레딩 모드에서 단일 스레드 코드에 발생하는
성능 저하는 이제 사용되는 플랫폼과 C 컴파일러에 따라 대략 5-10%입니다.

파이썬 3.14부터 윈도우에서 CPython 자유 스레딩 빌드용 확장 모듈을 컴파
일할 때는 전처리기 변수 *Py_GIL_DISABLED*를 빌드 백엔드가 지정해야 합
니다. 해당하는 값은 더 이상 C 컴파일러가 자동으로 결정하지 않기 때문입
니다. 실행 중인 인터프리터에서는 컴파일 시 사용된 설정을
"sysconfig.get_config_var()"를 사용하여 확인할 수 있습니다.

새로운 "-X context_aware_warnings" 플래그는 동시성에 안전한 경고 제어
가 활성화되는지 여부를 제어합니다. 이 플래그의 기본값은 자유 스레딩 빌
드에서는 참이고, GIL이 활성화된 빌드에서는 거짓입니다.

새로운 "thread_inherit_context" 플래그가 추가되었습니다. 해당하는 플래
그가 활성화되면 "threading.Thread"로 생성된 스레드는 "start()"를 호출
한 호출자의 "Context()" 복사본으로 시작됩니다. 가장 중요한 점은,
"catch_warnings"로 설정된 경고 필터링 컨텍스트가 해당 컨텍스트 안에서
시작된 스레드(또는 asyncio 태스크)에 "상속"되도록 한다는 것입니다. 또
한, "decimal" 컨텍스트 관리자와 같이 컨텍스트 변수를 사용하는 다른 모
듈에도 영향을 미칩니다. 해당하는 플래그의 기본값은 자유 스레딩 빌드에
서는 참이고, GIL이 활성화된 빌드에서는 거짓입니다.

(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에 재직하고 있으며, Meta는 이 프로젝트를 지원하
기 위해 상당한 엔지니어링 자원을 계속 제공해 왔습니다.)


개선된 에러 메세지
------------------

* 인터프리터는 이제 파이썬 키워드의 오타를 감지하면 유용한 제안을 제공
  합니다. 파이썬 키워드와 매우 비슷한 단어를 만나면 인터프리터는 에러
  메세지에서 올바른 키워드를 제안합니다. 해당하는 기능은 프로그래머가
  흔한 입력 실수를 빠르게 식별하고 수정하는 데 도움이 됩니다. 예를 들
  어, 다음과 같습니다:

     >>> whille True:
     ...     pass
     Traceback (most recent call last):
       File "<stdin>", line 1
         whille True:
         ^^^^^^
     SyntaxError: invalid syntax. Did you mean 'while'?

  해당하는 기능은 가장 흔한 케이스들에 초점을 맞추지만, 일부 철자 오류
  의 변형은 여전히 일반적인 문법 에러로 이어질 수 있습니다. (Pablo
  Galindo가 gh-132449를 통해 기능을 구현하였습니다.)

* "else" 블록 뒤에 오는 "elif" 문장에는 이제 전용 에러 메세지가 제공됩
  니다. (Steele Farnsworth가 gh-129902를 통해 기능을 구현하였습니다.)

     >>> if who == "me":
     ...     print("It's me!")
     ... else:
     ...     print("It's not me!")
     ... elif who is None:
     ...     print("Who is it?")
     File "<stdin>", line 5
       elif who is None:
       ^^^^
     SyntaxError: 'elif' block follows an 'else' block

* 조건 표현식(Conditional expressions)에서 "else" 뒤에 문장이 전달되거
  나 "if" 앞에 "pass", "break", "continue" 중 하나가 전달되면, 에러 메
  세지는 "expression"이 필요한 위치를 강조 표시합니다. (Sergey
  Miryanov가 gh-129515를 통해 기능을 구현하였습니다.)

     >>> x = 1 if True else pass
     Traceback (most recent call last):
       File "<string>", line 1
         x = 1 if True else pass
                            ^^^^
     SyntaxError: expected expression after 'else', but statement is given

     >>> x = continue if True else break
     Traceback (most recent call last):
       File "<string>", line 1
         x = continue if True else break
             ^^^^^^^^
     SyntaxError: expected expression before 'if', but statement is given

* 잘못 닫힌 문자열이 감지되면 에러 메세지는 해당 문자열이 문자열의 일
  부로 의도되었을 수 있음을 제안합니다. (Pablo Galindo가 gh-88535를 통
  해 기능을 구현하였습니다.)

     >>> "The interesting object "The important object" is very important"
     Traceback (most recent call last):
     SyntaxError: invalid syntax. Is this intended to be part of the string?

* 문자열에 호환되지 않는 접두사가 있는 경우, 이제 에러 메세지는 어떤
  접두사가 호환되지 않는지 보여줍니다. (Nikita Sobolev가 gh-133197를
  통해 기능을 구현하였습니다.)

     >>> ub'abc'
       File "<python-input-0>", line 1
         ub'abc'
         ^^
     SyntaxError: 'u' and 'b' prefixes are incompatible

* 다음 구문에서 호환되지 않는 대상과 함께 *as*를 사용할 때의 개선된 에
  러 메세지:

  * 임포트: *import ... as ...*

  * From 임포트: *from ... import ... as ...*

  * 예외 처리기: *except ... as ...*

  * 패턴 매칭 케이스: *case ... as ...*

  (Nikita Sobolev가 gh-123539, gh-123562, 그리고 gh-123440를 통해 기능
  을 구현하였습니다.)

* "dict" 또는 "set"에 해시할 수 없는 형의 인스턴스를 추가하려고 할 때
  의 에러 메세지가 개선되었습니다. (CF Bolz-Tereick와 Victor Stinner가
  gh-132828를 통해 기능을 구현하였습니다.)

     >>> s = set()
     >>> s.add({'pages': 12, 'grade': 'A'})
     Traceback (most recent call last):
       File "<python-input-1>", line 1, in <module>
         s.add({'pages': 12, 'grade': 'A'})
         ~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     TypeError: cannot use 'dict' as a set element (unhashable type: 'dict')
     >>> d = {}
     >>> l = [1, 2, 3]
     >>> d[l] = 12
     Traceback (most recent call last):
       File "<python-input-4>", line 1, in <module>
         d[l] = 12
         ~^^^
     TypeError: cannot use 'list' as a dict key (unhashable type: 'list')

* 동기화 컨텍스트 관리자 프로토콜을 지원하는 객체에 "with" 대신 "async
  with"를 사용하여 진입할 때와, 반대로 비동기 컨텍스트 관리자 프로토콜
  에 대해 반대의 방식으로 사용할 때의 에러 메세지가 개선되었습니다.
  (Bénédikt Tran이 gh-128398를 통해 기능을 구현하였습니다.)


**PEP 784**: 표준 라이브러리의 Zstandard 지원
---------------------------------------------

The new "compression" package contains modules "compression.lzma",
"compression.bz2", "compression.gzip" and "compression.zlib" which re-
export the "lzma", "bz2", "gzip" and "zlib" modules respectively. The
new import names under "compression" are the preferred names for
importing these compression modules from Python 3.14. However, the
existing modules names have not been deprecated. Any deprecation or
removal of the existing compression modules will occur no sooner than
five years after the release of 3.14.

The new "compression.zstd" module provides compression and
decompression APIs for the Zstandard format via bindings to Meta's
zstd library. Zstandard is a widely adopted, highly efficient, and
fast compression format. In addition to the APIs introduced in
"compression.zstd", support for reading and writing Zstandard
compressed archives has been added to the "tarfile", "zipfile", and
"shutil" modules.

새로운 모듈을 사용하여 데이터를 압축하는 예시는 다음과 같습니다:

   from compression import zstd
   import math

   data = str(math.pi).encode() * 20
   compressed = zstd.compress(data)
   ratio = len(compressed) / len(data)
   print(f"Achieved compression ratio of {ratio}")

이와 같이, 해당하는 API는 "lzma" 및 "bz2" 모듈의 API와 유사합니다.

(Emma Harper Smith, Adam Turner, Gregory P. Smith, Tomas Roun, Victor
Stinner, 그리고 Rogdham이 gh-132983를 통해 기능을 구현하였습니다.)

더 보기: **PEP 784**.


Asyncio의 인트로스펙션 기능
---------------------------

비동기 태스크를 사용하는 실행 중인 파이썬 프로세스를 검사하기 위한 새
로운 명령줄 인터페이스가 추가되었습니다. 해당하는 인터페이스는 *python
-m asyncio ps PID* 혹은 *python -m asyncio pstree PID*를 통해 사용할
수 있습니다.

*ps* 하위 명령은 주어진 프로세스 ID(PID)를 검사하고 현재 실행 중인
asyncio 태스크에 대한 정보를 표시합니다. 해당하는 명령은 모든 태스크,
각 태스크의 이름과 코루틴 스택, 그리고 어떤 태스크가 해당 태스크를
await하고 있는지를 일렬로 나열한 태스크 테이블을 출력합니다.

*pstree* 하위 명령은 같은 정보를 가져오지만, 대신 코루틴 관계를 계층
형식으로 보여 주는 시각적 비동기 호출 트리를 렌더링합니다. 해당하는 명
령은 오래 실행되거나 멈춘 비동기 프로그램을 디버깅하는 데 특히 유용합
니다. 개발자가 프로그램이 어디에서 블록되어 있는지, 어떤 태스크가 대기
중인지, 코루틴이 어떻게 서로 연결되어 있는지 빠르게 파악하는 데 도움이
될 수 있습니다.

예를 들어, 다음과 같은 예시를 생각해볼 수 있습니다:

   import asyncio

   async def play_track(track):
       await asyncio.sleep(5)
       print(f'🎵 Finished: {track}')

   async def play_album(name, tracks):
       async with asyncio.TaskGroup() as tg:
           for track in tracks:
               tg.create_task(play_track(track), name=track)

   async def main():
       async with asyncio.TaskGroup() as tg:
           tg.create_task(
             play_album('Sundowning', ['TNDNBTG', 'Levitate']),
             name='Sundowning')
           tg.create_task(
             play_album('TMBTE', ['DYWTYLM', 'Aqua Regia']),
             name='TMBTE')

   if __name__ == '__main__':
       asyncio.run(main())

실행 중인 프로세스에서 해당하는 새로운 도구를 사용하면 다음과 같은 테
이블이 출력할 수 있습니다:

   python -m asyncio ps 12345

   tid        task id              task name            coroutine stack                                    awaiter chain                                      awaiter name    awaiter id
   ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   1935500    0x7fc930c18050       Task-1               TaskGroup._aexit -> TaskGroup.__aexit__ -> main                                                                       0x0
   1935500    0x7fc930c18230       Sundowning           TaskGroup._aexit -> TaskGroup.__aexit__ -> album   TaskGroup._aexit -> TaskGroup.__aexit__ -> main    Task-1          0x7fc930c18050
   1935500    0x7fc93173fa50       TMBTE                TaskGroup._aexit -> TaskGroup.__aexit__ -> album   TaskGroup._aexit -> TaskGroup.__aexit__ -> main    Task-1          0x7fc930c18050
   1935500    0x7fc93173fdf0       TNDNBTG              sleep -> play                                      TaskGroup._aexit -> TaskGroup.__aexit__ -> album   Sundowning      0x7fc930c18230
   1935500    0x7fc930d32510       Levitate             sleep -> play                                      TaskGroup._aexit -> TaskGroup.__aexit__ -> album   Sundowning      0x7fc930c18230
   1935500    0x7fc930d32890       DYWTYLM              sleep -> play                                      TaskGroup._aexit -> TaskGroup.__aexit__ -> album   TMBTE           0x7fc93173fa50
   1935500    0x7fc93161ec30       Aqua Regia           sleep -> play                                      TaskGroup._aexit -> TaskGroup.__aexit__ -> album   TMBTE           0x7fc93173fa50

혹은 다음과 같은 트리를 출력할 수 있습니다:

   python -m asyncio pstree 12345

   └── (T) Task-1
       └──  main example.py:13
           └──  TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72
               └──  TaskGroup._aexit Lib/asyncio/taskgroups.py:121
                   ├── (T) Sundowning
                   │   └──  album example.py:8
                   │       └──  TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72
                   │           └──  TaskGroup._aexit Lib/asyncio/taskgroups.py:121
                   │               ├── (T) TNDNBTG
                   │               │   └──  play example.py:4
                   │               │       └──  sleep Lib/asyncio/tasks.py:702
                   │               └── (T) Levitate
                   │                   └──  play example.py:4
                   │                       └──  sleep Lib/asyncio/tasks.py:702
                   └── (T) TMBTE
                       └──  album example.py:8
                           └──  TaskGroup.__aexit__ Lib/asyncio/taskgroups.py:72
                               └──  TaskGroup._aexit Lib/asyncio/taskgroups.py:121
                                   ├── (T) DYWTYLM
                                   │   └──  play example.py:4
                                   │       └──  sleep Lib/asyncio/tasks.py:702
                                   └── (T) Aqua Regia
                                       └──  play example.py:4
                                           └──  sleep Lib/asyncio/tasks.py:702

만약 비동기 await 그래프에서 (프로그래밍에 문제가 있다는 점을 드러내는
것으로 해석될 수 있는) 사이클이 감지되면, 해당하는 도구는 에러를 발생
시키고 트리 구성을 방해하는 사이클 경로를 나열합니다:

   python -m asyncio pstree 12345

   ERROR: await-graph contains cycles - cannot print a tree!

   cycle: Task-2 → Task-3 → Task-2

(Pablo Galindo, Łukasz Langa, Yury Selivanov, 그리고 Marta Gomez
Macias가 gh-91048를 통해 기능을 구현하였습니다.)


동시성 안전 경고 제어
---------------------

"warnings.catch_warnings" 컨텍스트 관리자는 이제 경고 필터에 컨텍스트
변수를 선택적으로 사용합니다. 해당하는 기능은 *-X* 명령줄 옵션이나 환
경 변수를 사용하여 "context_aware_warnings" 플래그를 설정하면 활성화됩
니다. 이를 통해 "catch_warnings"를 여러 스레드 또는 비동기 태스크와 함
께 사용할 때 예측 가능한 경고 제어가 가능합니다. 해당하는 플래그의 기
본값은 자유 스레딩 빌드에서는 참이고, GIL이 활성화된 빌드에서는 거짓입
니다.

(Neil Schemenauer와 Kumar Aditya가 gh-130010를 통해 기능을 구현하였습
니다.)


이외의 언어 변경 사항
=====================

* 윈도우에서는 이제 모든 윈도우 코드 페이지가 'cpXXX' 코덱으로 지원됩
  니다. (Serhiy Storchaka가 gh-123803를 통해 기능을 구현하였습니다.)

* C99 이후의 C 표준에 지정된 대로 실수와 복소수를 결합하는 혼합 모드
  산술 규칙이 구현되었습니다. (Sergey B Kirpichev가 gh-69639를 통해 기
  능을 구현하였습니다.)

* 최적화 여부 및 "-O" 명령줄 옵션과 관계없이 더 많은 문법 에러가 이제
  감지됩니다. 여기에는 *__debug__*에 쓰기, "await"의 잘못된 사용, 비동
  기 함수 밖의 비동기 컴프리헨션이 포함됩니다. 예를 들어, *python -O
  -c 'assert (__debug__ := 1)'* 혹은 *python -O -c 'assert await 1'*는
  이제 "SyntaxError"를 발생시킵니다. (Irit Katriel과 Jelle Zijlstra가
  gh-122245 및 gh-121637를 통해 기능을 구현하였습니다.)

* 순수한 C 형의 서브클래스를 만들 때, 서브클래스에서 명시적으로 재정의
  되지 않은 경우 새로운 형의 C 슬롯이 클래스 생성 시 더 이상 감싸여진
  버전으로 대체되지 않습니다. (Tomasz Pytel이 gh-132284를 통해 기능을
  구현하였습니다.)


내장 함수들
-----------

* "bytes.fromhex()" 및 "bytearray.fromhex()" 메서드는 이제 ASCII
  "bytes" 및 *바이트열류 객체*를 받아들입니다. (Daniel Pope가
  gh-129349를 통해 기능을 구현하였습니다.)

* 숫자를 각각 "float" 및 "complex" 형으로 변환하는 클래스 메서드
  "float.from_number()" 및 "complex.from_number()"가 추가되었습니다.
  인자가 실수가 아니면 "TypeError"를 발생시킵니다. (Serhiy Storchaka가
  gh-84978를 통해 기능을 구현하였습니다.)

* 새로운 스타일의 문자열 포맷팅("format()" 또는 f-문자열)의 부동 소수
  점 표시 형식에서 소수부에 밑줄과 쉼표를 천 단위 구분자로 사용할 수
  있도록 지원합니다. (Sergey B Kirpichev가 gh-87790를 통해 기능을 구현
  하였습니다.)

* "int()" 함수는 더 이상 "__trunc__()"에 위임하지 않습니다. "int()"로
  의 변환을 지원하려는 클래스는 "__int__()" 혹은 "__index__()" 중 하나
  를 구현해야 합니다. (Mark Dickinson이 gh-119743를 통해 기능을 구현하
  였습니다.)

* "map()" 함수에는 이제 "zip()"처럼 모든 이터러블의 길이가 같은지 검사
  하는 선택적 키워드 전용 *strict* 플래그가 추가되었습니다. (Wannes
  Boeykens가 gh-119793를 통해 기능을 구현하였습니다.)

* "memoryview" 형이 이제 서브스크립션을 지원하여 *제네릭 형*이 되었습
  니다. (Brian Schubert가 gh-126012를 통해 기능을 구현하였습니다.)

* "NotImplemented"를 불리언 컨텍스트에서 사용하면 이제 "TypeError"가
  발생합니다. 해당하는 동작은 파이썬 3.9부터 "DeprecationWarning"를 발
  생시켜 왔습니다. (Jelle Zijlstra가 gh-118767를 통해 기능을 구현하였
  습니다.)

* 세 개의 인자를 받는 "pow()"는 이제 필요할 때 "__rpow__()" 호출을 시
  도합니다. 이전에는 두 개의 인자를 받는 "pow()"와 이항 거듭제곱 연산
  자에서만 해당하는 메서드가 호출되었습니다. (Serhiy Storchaka가
  gh-130104를 통해 기능을 구현하였습니다.)

* "super" 객체는 이제 "복사 가능"하며 "피클 가능"합니다. (Serhiy
  Storchaka가 gh-125767를 통해 기능을 구현하였습니다.)


명령줄 및 환경
--------------

* 임포트 시간 플래그는 이제 새로운 "-X importtime=2"를 통해 이미 로드
  된('cached') 모듈을 추적할 수 있습니다. 이러한 모듈이 임포트되면
  *self*와 *cumulative* 시간은 문자열 *cached*로 대체됩니다.

  *-X importtime*에서 *2*를 초과하는 값은 이제 향후 사용을 위해 예약되
  었습니다.

  (Noah Kim과 Adam Turner가 gh-118655를 통해 기능을 구현하였습니다.)

* The command-line option "-c" now automatically dedents its code
  argument before execution. (Contributed by Jon Crall and Steven Sun
  in gh-103998.)

* "-J"는 더 이상 Jython 관련 예약 플래그가 아니며, 이제 특별한 의미가
  없습니다. (Adam Turner가 gh-133336를 통해 기능을 구현하였습니다.)


PEP 758: 괄호 없는 *except* 및 *except** 표현식 허용
----------------------------------------------------

여러 예외 형이 있고 *as* 절을 사용하지 않는 경우, 이제 "except" 및
"except*" 표현식에서 괄호를 생략할 수 있습니다. 예를 들어, 다음과 같습
니다:

   try:
       connect_to_server()
   except TimeoutError, ConnectionRefusedError:
       print('The network has ceased to be!')

(Pablo Galindo와 Brett Cannon이 **PEP 758**과 gh-131831를 통해 기능을
구현하였습니다.)


PEP 765: "finally" 블록 내 제어 흐름
------------------------------------

컴파일러는 이제 "return", "break" 혹은 "continue" 문이 "finally" 블록
을 벗어나는 효과를 갖는 경우 "SyntaxWarning"을 발생시킵니다. 해당하는
변경 사항은 **PEP 765**에 명시되어 있습니다.

해당하는 변경 사항이 불편한 상황(예를 들어, 코드 린팅 때문에 경고가 중
복되는 경우)에서는 경고 필터를 사용해 *ignore::SyntaxWarning*을 필터로
추가함으로써 모든 문법 경고를 끌 수 있습니다. 다른 경고를 에러로 변환
하는 필터와 함께 지정할 수 있습니다(예를 들어, CLI 옵션으로 *-Werror
-Wignore::SyntaxWarning*을 전달하거나
*PYTHONWARNINGS=error,ignore::SyntaxWarning*을 설정하는 방식입니다).

"warnings" 모듈을 사용하여 런타임에 이러한 필터를 적용하면, 필터가 조
정된 *후에* 컴파일되는 코드에서만 경고가 억제된다는 점에 유의해주시기
를 부탁드립니다. 필터 조정 전에 컴파일되는 코드(예를 들어, 모듈이 임포
트될 때)는 여전히 문법 경고를 발생시킵니다.

(Irit Katriel이 gh-130080를 통해 기능을 구현하였습니다.)


Garbage collection
------------------

**From Python 3.14.5 onwards:**

The garbage collector (GC) has changed in Python 3.14.5.

Python 3.14.0-3.14.4 shipped with a new incremental GC. However, due
to a number of reports of significant memory pressure in production
environments, it has been reverted back to the generational GC from
3.13. This is the GC now used in Python 3.14.5 and later.

**Previously in Python 3.14.0-3.14.4:**

순환 가비지 수거기는 이제 점진적인 방식으로 작동합니다. 이는 더 큰 힙
에서 최대 일시 중지 시간이 10배 이상 줄어든다는 뜻입니다.

이제 세대는 젊은 세대와 오래된 세대, 두 가지만 있습니다.
"gc.collect()"를 직접 호출하지 않으면 GC는 조금 덜 자주 호출됩니다. 호
출될 때에는 하나 이상의 세대를 수거하는 대신 젊은 세대와 오래된 세대의
점진적인 한 증가분 만큼을 수거합니다.

"gc.collect()"의 동작은 약간 변경됩니다:

* *gc.collect(1)*: 1세대를 수거하는 대신 가비지 수거의 한 점진적인 단
  계를 수행합니다.

* 그 밖의 "gc.collect()" 호출은 변경되지 않습니다.

(Mark Shannon이 gh-108362를 통해 기능을 구현하였습니다.)


기본 대화형 셸
--------------

* 기본 *대화형* 셸은 이제 파이썬 문법을 강조 표시합니다. 해당하는 기능
  은 "PYTHON_BASIC_REPL" 혹은 색상을 비활성화하는 다른 환경 변수가 설
  정된 경우를 제외하고 기본적으로 활성화됩니다. 자세한 내용은
  Controlling color를 참조해주시기를 부탁드립니다.

  문법 강조를 위한 기본 색상 테마는 좋은 대비를 제공하려고 하며, 최대
  호환성을 위해 4비트 VGA 표준 ANSI 색상 코드만 사용합니다. 이 테마는
  실험적 API인 "_colorize.set_theme()" 함수를 사용하여 커스터마이즈할
  수 있습니다. 해당하는 함수는 대화형으로 호출하거나 "PYTHONSTARTUP"
  스크립트에서 호출할 수 있습니다. 해당하는 함수에는 안정성 보장이 없
  으며 변경되거나 제거될 수 있음을 유의해주시기를 부탁드립니다.

  (Łukasz Langa가 gh-131507를 통해 기능을 구현하였습니다.)

* 기본 *대화형* 셸은 이제 임포트 자동 완성을 지원합니다. 이는 *import
  co*를 입력하고 "<Tab>"을 누르면 *co*로 시작하는 모듈을 제안한다는 뜻
  입니다. 마찬가지로 *from concurrent import i*를 입력하면
  *concurrent*의 *i*로 시작하는 하위 모듈을 제안합니다. 현재 모듈 어트
  리뷰트의 자동 완성은 지원되지 않는다는 점에 유의해주시기를 부탁드립
  니다. (Tomas Roun이 gh-69605를 통해 기능을 구현하였습니다.)


새로운 모듈들
=============

* "annotationlib": *어노테이션*을 인트로스펙션하기 위한 모듈입니다. 보
  다 자세한 내용은 PEP 749를 참조해주시기를 부탁드립니다. (Jelle
  Zijlstra가 gh-119180를 통해 기능을 구현하였습니다.)

* "compression" ("compression.zstd" 포함): Zstandard 압축 형식을 지원
  하는 새 모듈을 포함하여, 압축 관련 모듈을 위한 패키지입니다. 보다 자
  세한 내용은 PEP 784를 참조해주시기를 부탁드립니다. (Emma Harper
  Smith, Adam Turner, Gregory P. Smith, Tomas Roun, Victor Stinner, 그
  리고 Rogdham이 gh-132983를 통해 기능을 구현하였습니다.)

* "concurrent.interpreters": 표준 라이브러리의 여러 인터프리터를 지원
  합니다. 보다 자세한 내용은 PEP 734를 참조해주시기를 부탁드립니다.
  (Eric Snow가 gh-134939를 통해 기능을 구현하였습니다.)

* "string.templatelib": 템플릿 문자열 리터럴(t-문자열)을 지원합니다.
  보다 자세한 내용은 PEP 750를 참조해주시기를 부탁드립니다. (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를 통해 기능을 구현하였습니다
  .)


개선된 모듈들
=============


argparse
--------

* "argparse.ArgumentParser" 클래스에 대한 프로그램 이름의 기본값은 이
  제 파이썬 인터프리터가 *__main__* 모듈 코드를 찾도록 지시받은 방식을
  반영합니다. (Serhiy Storchaka와 Alyssa Coghlan이 gh-66436를 통해 기
  능을 구현하였습니다.)

* "argparse.ArgumentParser" 클래스에 선택적 *suggest_on_error* 매개변
  수가 도입되었습니다. 해당하는 매개변수는 사용자가 인자 선택지나 하위
  파서 이름을 잘못 입력했을 때 제안을 제공할 수 있게 합니다. (Savannah
  Ostrowski가 gh-124456를 통해 기능을 구현하였습니다.)

* 도움말 텍스트에 색상을 적용합니다. 해당하는 기능은
  "argparse.ArgumentParser" 클래스의 선택적 *color* 매개변수로 비활성
  화할 수 있습니다. 또한 환경 변수로 제어할 수도 있습니다. (Hugo van
  Kemenade가 gh-130645를 통해 기능을 구현하였습니다.)


ast
---

* 두 개의 AST를 비교하는 함수인 "compare()"를 추가하였습니다. (Batuhan
  Taskaya와 Jeremy Hylton이 gh-60191를 통해 기능을 구현하였습니다.)

* AST 노드에 대한 "copy.replace()" 지원이 추가되었습니다. (Bénédikt
  Tran이 gh-121141를 통해 기능을 구현하였습니다.)

* 최적화 수준 2에서는 이제 최적화된 AST에서 독스트링이 제거됩니다.
  (Irit Katriel이 gh-123958를 통해 기능을 구현하였습니다.)

* "repr()" 출력은 이제 AST 노드에 대해 더 많은 정보를 포함합니다.
  (Tomas Roun이 gh-116022를 통해 기능을 구현하였습니다.)

* 입력으로 AST가 전달되면, "parse()" 함수는 이제 루트 노드 형이 적절한
  지 항상 검증합니다. (Irit Katriel이 gh-130139를 통해 기능을 구현하였
  습니다.)

* 명령줄 인터페이스에 새로운 옵션 "--feature-version", "--optimize" 및
  "--show-empty"를 추가하였습니다. (Semyon Moroz가 gh-133367를 통해 기
  능을 구현하였습니다.)


asyncio
-------

* "create_task()"라는 이름의 함수와 메서드는 이제 임의의 키워드 인자
  목록을 받습니다. 모든 키워드 인자는 "Task" 생성자 혹은 커스텀 태스크
  팩토리에 전달됩니다. (보다 자세한 내용은 "set_task_factory()"를 참조
  해주시기를 부탁드립니다.) *name* 및 *context* 키워드 인자는 더 이상
  특별하게 취급되지 않습니다. 이제 이름은 팩토리의 *name* 키워드 인자
  를 사용해 설정해야 하며, *context*는 *None*일 수 있습니다.

  해당하는 변경 사항은 다음 함수 및 메서드에 영향을 미칩니다:
  "asyncio.create_task()", "asyncio.loop.create_task()",
  "asyncio.TaskGroup.create_task()".

  (Thomas Grainger가 gh-128307를 통해 기능을 구현하였습니다.)

* 프로그램의 호출 그래프를 인트로스펙션하고 출력하기 위한 두 개의 새로
  운 유틸리티 함수가 추가되었습니다: "capture_call_graph()" 및
  "print_call_graph()". 보다 자세한 내용은 asyncio 인트로스펙션 기능을
  참조해주시기를 부탁드립니다. (Yury Selivanov, Pablo Galindo Salgado
  및 Łukasz Langa가 gh-91048를 통해 기능을 구현하였습니다.)


달력
----

* 기본적으로 "calendar"의 명령줄 텍스트 출력에서는 오늘 날짜가 색상으
  로 강조 표시됩니다. 해당하는 동작은 환경 변수를 통해 제어할 수 있습
  니다. (Hugo van Kemenade가 gh-128317를 통해 기능을 구현하였습니다.)


concurrent.futures
------------------

* 새로운 실행기 클래스인 "InterpreterPoolExecutor"를 추가하였습니다.
  해당하는 클래스는 동일한 프로세스 안의 여러 파이썬 인터프리터('서브
  인터프리터')를 파이썬 코드에 드러냅니다. 해당하는 클래스는 독립적인
  파이썬 인터프리터 풀을 사용하여 호출을 비동기적으로 실행합니다.

  이는 PEP 734에서 도입된 새로운 "interpreters" 모듈과는 별개입니다.
  (Eric Snow가 gh-124548를 통해 기능을 구현하였습니다.)

* On Unix platforms other than macOS, 'forkserver' is now the default
  start method for "ProcessPoolExecutor" (replacing 'fork'). This
  change does not affect Windows or macOS, where 'spawn' remains the
  default start method.

  스레딩과 호환되지 않는 *fork* 방법이 필요한 경우,
  "ProcessPoolExecutor"에 멀티프로세싱 컨텍스트인 *mp_context*를 제공
  하여 이를 명시적으로 요청해야 합니다.

  *fork* 방법과 관련된 정보 및 차이점, 그리고 해당하는 변경 사항이 가
  변 전역 공유 변수 그리고/혹은 자동으로 "pickle" 처리할 수 없는 공유
  객체를 사용하는 기존 코드에 어떤 영향을 줄 수 있는지에 대한 내용은
  forkserver 제한 사항을 참조해주시기를 부탁드립니다.

  (Gregory P. Smith가 gh-84559를 통해 기능을 구현하였습니다.)

* "ProcessPoolExecutor"에 주어진 풀의 살아 있는 모든 워커 프로세스를
  종료하거나 강제 종료하는 방법인 새 메서드 두 개,
  "terminate_workers()" 및 "kill_workers()"를 추가하였습니다. (Charles
  Machalow가 gh-130849를 통해 기능을 구현하였습니다.)

* 아직 결과가 산출되지 않은 제출된 태스크 수를 제한하기 위해
  "Executor.map"에 선택적 *buffersize* 매개변수를 추가하였습니다. 버퍼
  가 가득 차면 버퍼에서 결과가 산출될 때까지 *iterables*에 대한 이터레
  이션이 일시 중지됩니다. (Enzo Bonnal과 Josh Rosenberg가 gh-74028를
  통해 기능을 구현하였습니다.)


configparser
------------

* "configparser"는 보안을 개선하기 위해 읽을 수 없는 설정 파일을 더 이
  상 작성하지 않습니다. 구분자를 포함하거나 섹션 헤더 패턴으로 시작하
  는 키를 "write()" 메서드로 쓰려고 시도하면 "InvalidWriteError"가 발
  생합니다. (Jacob Lincoln이 gh-129270를 통해 기능을 구현하였습니다.)


contextvars
-----------

* "Token" 객체가 *컨텍스트 관리자* 프로토콜을 지원합니다. (Andrew
  Svetlov가 gh-129889를 통해 기능을 구현하였습니다.)


ctypes
------

* "Structure" 및 "Union" 객체에서 비트 필드의 레이아웃이 이제 플랫폼
  기본값(GCC/Clang 혹은 MSVC)에 더 가깝게 맞춰졌습니다. 특히 필드는 더
  이상 겹치지 않습니다. (Matthias Görgens가 gh-97702를 통해 기능을 구
  현하였습니다.)

* 기본값이 아닌 ABI에 맞추는 데 도움이 되도록 "Structure._layout_" 클
  래스 어트리뷰트를 이제 설정할 수 있습니다. (Petr Viktorin이 gh-97702
  를 통해 기능을 구현하였습니다.)

* "Structure"/"Union" 필드 디스크립터의 클래스는 이제 "CField"로 사용
  할 수 있으며, 디버깅과 인트로스펙션을 돕는 새 어트리뷰트를 갖습니다.
  (Petr Viktorin이 gh-128715를 통해 기능을 구현하였습니다.)

* 윈도우에서 "COMError" 예외가 새롭게 공개되었습니다. (Jun Komoda가
  gh-126686를 통해 기능을 구현하였습니다.)

* 윈도우에서 "CopyComPointer()" 함수가 새롭게 공개되었습니다. (Jun
  Komoda가 gh-127275를 통해 기능을 구현하였습니다.)

* 제공된 포인터와 길이를 참조하는 "memoryview" 객체를 생성하는 함수인
  "memoryview_at()"를 추가하였습니다. 해당하는 함수는
  "ctypes.string_at()"처럼 동작하지만 버퍼 복사를 피하며, 동적으로 크
  기가 정해지는 버퍼를 전달받는 순수 파이썬 콜백 함수를 구현할 때 일반
  적으로 유용합니다. (Rian Hunter가 gh-112018를 통해 기능을 구현하였습
  니다.)

* 컴파일러와 *libffi* 라이브러리가 모두 복소 C 형을 지원하는 경우, 복
  소 형인 "c_float_complex", "c_double_complex" 및
  "c_longdouble_complex"를 이제 사용할 수 있습니다. (Sergey B
  Kirpichev가 gh-61103를 통해 기능을 구현하였습니다.)

* 현재 프로세스가 로드한 공유 라이브러리를 나열하기 위한
  "ctypes.util.dllist()"를 추가하였습니다. (Brian Ward가 gh-119349를
  통해 기능을 구현하였습니다.)

* "ctypes.POINTER()" 형 캐시를 전역 내부 캐시(*_pointer_type_cache*)에
  서 해당 "ctypes" 형의 "_CData.__pointer_type__" 어트리뷰트로 이동하
  였습니다. 이렇게 하면 일부 상황에서 캐시가 제한 없이 증가하는 것을
  방지할 수 있습니다. (Sergey Miryanov가 gh-100926를 통해 기능을 구현
  하였습니다.)

* "py_object" 형은 이제 서브스크립트 표기법을 지원하여 *제네릭 형*이
  되었습니다. (Brian Schubert가 gh-132168를 통해 기능을 구현하였습니다
  .)

* "ctypes"는 이제 *자유 스레딩 빌드*를 지원합니다. (Kumar Aditya와
  Peter Bierma가 gh-127945를 통해 기능을 구현하였습니다.)


curses
------

* 색상 쌍 *0*을 변경할 수 있게 하는 "use_default_colors()" 함수의 개선
  버전인 "assume_default_colors()" 함수를 추가하였습니다. (Serhiy
  Storchaka가 gh-133139를 통해 기능을 구현하였습니다.)


datetime
--------

* "datetime.date" 및 "datetime.time" 클래스에 "strptime()" 메서드를 추
  가하였습니다. (Wannes Boeykens가 gh-41431를 통해 기능을 구현하였습니
  다.)


decimal
-------

* "Decimal"의 대체 생성자로 "Decimal.from_number()"를 추가하였습니다.
  (Serhiy Storchaka가 gh-121798를 통해 기능을 구현하였습니다.)

* "IEEEContext()"를 드러내어 IEEE 754 (2008) 십진 소수 교환 형식에 해
  당하는 컨텍스트 생성을 지원합니다. (Sergey B Kirpichev가 gh-53032를
  통해 기능을 구현하였습니다.)


difflib
-------

* "HtmlDiff" 클래스가 생성하는, 변경 사항이 강조 표시된 비교 페이지는
  이제 '다크 모드'를 지원합니다. (Jiahao Li가 gh-129939를 통해 기능을
  구현하였습니다.)


dis
---

* 줄 번호만이 아니라 "명령어"의 전체 소스 위치 정보를 렌더링하는 기능
  을 추가하였습니다. 해당하는 기능은 *show_positions* 키워드 인자를 통
  해 다음 인터페이스에 추가되었습니다:

  * "dis.Bytecode"

  * "dis.dis()"

  * "dis.distb()"

  * "dis.disassemble()"

  해당하는 기능은 "dis --show-positions"를 통해서도 접근 가능합니다.
  (Bénédikt Tran이 gh-123165를 통해 기능을 구현하였습니다.)

* 특화된 바이트 코드를 표시하는 "dis --specialized" 명령줄 옵션을 추가
  하였습니다. (Bénédikt Tran이 gh-127413를 통해 기능을 구현하였습니다
  .)


errno
-----

* "EHWPOISON" 에러 코드 상수를 추가하였습니다. (James Roy가 gh-126585
  를 통해 기능을 구현하였습니다.)


faulthandler
------------

* 새로운 "dump_c_stack()" 함수 혹은 "faulthandler.enable()" 함수의
  *c_stack* 인자를 통해 이를 지원하는 시스템에서 C 스택 트레이스백을
  출력하는 기능을 추가하였습니다. (Peter Bierma가 gh-127604를 통해 기
  능을 구현하였습니다.)


fnmatch
-------

* 주어진 패턴과 일치하는 이름을 거부하는 함수인 "filterfalse()"를 추가
  하였습니다. (Bénédikt Tran이 gh-74598를 통해 기능을 구현하였습니다.)


fractions
---------

* 이제 "as_integer_ratio()" 메서드를 가진 모든 객체로부터 "Fraction"
  객체를 생성할 수 있습니다. (Serhiy Storchaka가 gh-82017를 통해 기능
  을 구현하였습니다.)

* "Fraction"의 대체 생성자로 "Fraction.from_number()"를 추가하였습니다
  . (Serhiy Storchaka가 gh-121797를 통해 기능을 구현하였습니다.)


functools
---------

* "Placeholder" 센티널을 추가하였습니다. 반환되는 partial 객체에서 위
  치 인자를 위한 자리를 예약하기 위해 "partial()" 혹은
  "partialmethod()" 함수와 함께 사용할 수 있습니다. (Dominykas
  Grigonis가 gh-119127를 통해 기능을 구현하였습니다.)

* "reduce()"의 *initial* 매개변수를 키워드 인자로 전달할 수 있도록 하
  였습니다. (Sayandip Dutta가 gh-125916를 통해 기능을 구현하였습니다.)


getopt
------

* 선택적 인자가 있는 옵션에 대한 지원을 추가하였습니다. (Serhiy
  Storchaka가 gh-126374를 통해 기능을 구현하였습니다.)

* 서로 섞인 옵션과 비옵션 인자를 순서대로 반환하는 기능을 추가하였습니
  다. (Serhiy Storchaka가 gh-126390를 통해 기능을 구현하였습니다.)


getpass
-------

* "getpass()" 함수에서 키워드 전용 선택적 인자 *echo_char*를 통해 키보
  드 피드백을 지원합니다. 문자가 입력될 때마다 자리 표시자 문자가 렌더
  링되고, 문자가 삭제되면 제거됩니다. (Semyon Moroz가 gh-77065를 통해
  기능을 구현하였습니다.)


graphlib
--------

* 정렬이 시작되지 않은 한 "TopologicalSorter.prepare()"를 두 번 이상
  호출할 수 있도록 하였습니다. (Daniel Pope가 gh-130914를 통해 기능을
  구현하였습니다.)


heapq
-----

* "heapq" 모듈은 다음 새 함수들을 통해 최대 힙 작업에 대한 지원을 개선
  하였습니다:

  * "heapify_max()"

  * "heappush_max()"

  * "heappop_max()"

  * "heapreplace_max()"

  * "heappushpop_max()"


hmac
----

* HACL* 프로젝트의 형식적으로 검증된 코드를 사용하여 HMAC(**RFC
  2104**)에 대한 내장 구현을 추가하였습니다. 해당하는 구현은 HMAC의
  OpenSSL 구현을 사용할 수 없을 때 대체 수단으로 사용됩니다. (Bénédikt
  Tran이 gh-99108를 통해 기능을 구현하였습니다.)


http
----

* "http.server" 모듈이 생성하는 디렉터리 목록과 에러 페이지는 브라우저
  가 기본 다크 모드를 적용할 수 있도록 합니다. (Yorik Hansen이
  gh-123430를 통해 기능을 구현하였습니다.)

* "http.server" 모듈은 이제 "http.server.HTTPSServer" 클래스를 사용하
  여 HTTPS를 통한 서비스를 지원합니다. 해당하는 기능은 명령줄 인터페이
  스(*python -m http.server*)에서 다음 옵션을 통해 노출됩니다:

  * "--tls-cert <path>": TLS 인증서 파일의 경로입니다.

  * "--tls-key <path>": 비공개 키 파일의 선택적 경로입니다.

  * "--tls-password-file <path>": 비공개 키의 비밀번호 파일에 대한 선
    택적 경로입니다.

  (Semyon Moroz가 gh-85162를 통해 기능을 구현하였습니다.)


imaplib
-------

* "IMAP4.idle()" 메서드를 추가하였습니다. 해당하는 메서드는 **RFC
  2177**에 정의된 IMAP4 *IDLE* 명령을 구현합니다. (Forest가 gh-55454를
  통해 기능을 구현하였습니다.)


inspect
-------

* "signature()"는 어노테이션을 표현하는 데 사용되는
  "annotationlib.Format"를 제어하기 위한 새 인자 *annotation_format*을
  받습니다. (Jelle Zijlstra가 gh-101552를 통해 기능을 구현하였습니다.)

* "Signature.format()"은 새 인자 *unquote_annotations*를 받습니다. 참
  이면 문자열 *어노테이션*이 주변 따옴표 없이 표시됩니다. (Jelle
  Zijlstra가 gh-101552를 통해 기능을 구현하였습니다.)

* 객체가 *패키지*인지 여부를 판단하는 "ispackage()" 함수를 추가하였습
  니다. (Zhikang Yan이 gh-125634를 통해 기능을 구현하였습니다.)


io
--

* *read*를 사용하여 비차단 방식의 스트림에서 텍스트를 읽으면, 연산이
  즉시 바이트열을 반환할 수 없는 경우 이제 "BlockingIOError"가 발생할
  수 있습니다. (Giovanni Siragusa가 gh-109523를 통해 기능을 구현하였습
  니다.)

* "Reader" 및 "Writer" 프로토콜을 "typing.IO", "typing.TextIO", 및
  "typing.BinaryIO" 의사 프로토콜의 더 간단한 대안으로 추가하였습니다.
  (Sebastian Rittau가 gh-127648를 통해 기능을 구현하였습니다.)


json
----

* JSON 직렬화 에러에 대한 예외 노트를 추가하여 에러의 소스를 식별할 수
  있도록 합니다. (Serhiy Storchaka가 gh-122163를 통해 기능을 구현하였
  습니다.)

* "json" 모듈을 "-m" 스위치를 사용하여 스크립트로 사용할 수 있도록 허
  용합니다: **python -m json**. 이제 해당하는 방식은 *약하게 폐지된*
  **python -m json.tool**보다 선호됩니다. JSON 명령줄 인터페이스 설명
  서를 참조해주시기를 부탁드립니다. (Trey Hunner가 gh-122873를 통해 기
  능을 구현하였습니다.)

* JSON 명령줄 인터페이스의 출력은 기본적으로 색상으로 강조됩니다. 해당
  하는 동작은 환경 변수를 통해 제어할 수 있습니다. (Tomas Roun이
  gh-131952를 통해 기능을 구현하였습니다.)


linecache
---------

* "getline()"은 이제 동결된 모듈의 소스 코드를 가져올 수 있습니다.
  (Tian Gao가 gh-131638를 통해 기능을 구현하였습니다.)


logging.handlers
----------------

* "QueueListener" 객체는 이제 *컨텍스트 관리자* 프로토콜을 지원합니다.
  (Charles Machalow가 gh-132106를 통해 기능을 구현하였습니다.)

* "QueueListener.start" 메서드는 이제 리스너가 이미 시작된 경우
  "RuntimeError"를 발생시킵니다. (Charles Machalow가 gh-132106를 통해
  기능을 구현하였습니다.)


math
----

* 모듈의 도메인 에러에 대해 더 자세한 에러 메세지를 추가하였습니다.
  (Charlie Zhao와 Sergey B Kirpichev가 gh-101410를 통해 기능을 구현하
  였습니다.)


mimetypes
---------

* 모듈에 공개 명령줄 인터페이스를 추가하였습니다. 해당하는 인터페이스
  는 **python -m mimetypes**를 통해 호출됩니다. (Oleg Iarygin과 Hugo
  van Kemenade가 gh-93096를 통해 기능을 구현하였습니다.)

* RFC와 일반적인 사용 방식들을 기반으로 여러 새로운 MIME 형을 추가하였
  습니다:

  -[ 폰트들을 위한, Microsoft 및 **RFC 8081** MIME 형 ]-

  * Embedded OpenType: "application/vnd.ms-fontobject"

  * OpenType Layout (OTF) "font/otf"

  * TrueType: "font/ttf"

  * WOFF 1.0 "font/woff"

  * WOFF 2.0 "font/woff2"

  -[ **RFC 9559** Matroska 시청각 데이터 컨테이너 구조용 MIME 형 ]-

  * 비디오가 없는 오디오: *audio/matroska* (*.mka*)

  * 비디오: *video/matroska* (*.mkv*)

  * 입체 비디오: *video/matroska-3d* (*.mk3d*)

  -[ RFC들이 있는 이미지 ]-

  * **RFC 1494**: CCITT 그룹 3 (*.g3*)

  * **RFC 3362**: 실시간 팩시밀리, T.38 (*.t38*)

  * **RFC 3745**: JPEG 2000 (*.jp2*), 확장 형식 (*.jpx*) 및 복합 형식
    (*.jpm*)

  * **RFC 3950**: Tag Image File Format Fax eXtended, TIFF-FX (*.tfx*)

  * **RFC 4047**: Flexible Image Transport System (*.fits*)

  * **RFC 7903**: 향상된 메타파일 (*.emf*) 및 윈도우 메타파일 (*.wmf*)

  -[ 기타 MIME 형 추가 및 변경 사항 ]-

  * **RFC 2361**: *.avi*의 형을 *video/vnd.avi*로, *.wav*의 형을
    *audio/vnd.wave*로 변경

  * **RFC 4337**: MPEG-4 *audio/mp4* (*.m4a*) 추가

  * **RFC 5334**: Ogg 미디어 (*.oga*, *.ogg* 및 *.ogx*) 추가

  * **RFC 6713**: gzip *application/gzip* (*.gz*) 추가

  * **RFC 9639**: FLAC *audio/flac* (*.flac*) 추가

  * **RFC 9512** YAML 파일 (*.yaml* 및 *.yml*)용 *application/yaml*
    MIME 형

  * 7z *application/x-7z-compressed* (*.7z*) 추가

  * 엄격하지 않은 경우에 대해 Android 패키지 *application/vnd.android
    .package-archive* (*.apk*) 추가

  * deb 패키지 *application/x-debian-package* (*.deb*) 추가

  * glTF 바이너리 *model/gltf-binary* (*.glb*) 추가

  * glTF JSON/ASCII *model/gltf+json* (*.gltf*) 추가

  * M4V *video/x-m4v* (*.m4v*) 추가

  * PHP *application/x-httpd-php* (*.php*) 추가

  * RAR *application/vnd.rar* (*.rar*) 추가

  * RPM *application/x-rpm* (*.rpm*) 추가

  * STL *model/stl* (*.stl*) 추가

  * 윈도우 미디어 비디오 *video/x-ms-wmv* (*.wmv*) 추가

  * 사실상(de facto): WebM *audio/webm* (*.weba*) 추가

  * ECMA-376: *.docx*, *.pptx*, 그리고 *.xlsx* 형 추가

  * OASIS: OpenDocument *.odg*, *.odp*, *.ods*, 그리고 *.odt* 형 추가

  * W3C: EPUB *application/epub+zip* (*.epub*) 추가

  (Sahil Prajapati와 Hugo van Kemenade가 gh-84852를 통해 기능을 구현하
  였으며, Sasha "Nelie" Chernykh와 Hugo van Kemenade가 gh-132056를 통
  해 기능을 구현하였고, Hugo van Kemenade가 gh-89416, gh-85957, 그리고
  gh-129965를 통해 기능을 구현하였습니다.)


multiprocessing
---------------

* On Unix platforms other than macOS, 'forkserver' is now the default
  start method (replacing 'fork'). This change does not affect Windows
  or macOS, where 'spawn' remains the default start method.

  스레딩과 호환되지 않는 *fork* 방법이 필요한 경우, "get_context()"에
  서 얻은 컨텍스트를 통해 명시적으로 요청하거나(권장),
  "set_start_method()"를 통해 기본값을 변경해야 합니다.

  *fork* 방법과 관련된 정보 및 차이점, 그리고 해당하는 변경 사항이 가
  변 전역 공유 변수 그리고/혹은 자동으로 "pickle" 처리할 수 없는 공유
  객체를 사용하는 기존 코드에 어떤 영향을 줄 수 있는지에 대한 내용은
  forkserver 제한 사항을 참조해주시기를 부탁드립니다.

  (Gregory P. Smith가 gh-84559를 통해 기능을 구현하였습니다.)

* "multiprocessing"의 *'forkserver'* 시작 메서드는 이제 제어 소켓을 인
  증하여, 다른 프로세스가 forkserver에 워커 생성 및 코드 실행을 유발할
  수 있는지를 제한하는 데 파일시스템 권한에만 의존하지 않도록 합니다.
  (Gregory P. Smith가 gh-97514를 통해 기능을 구현하였습니다.)

* *list* 및 *dict* 형에 대한 multiprocessing 프록시 객체에 이전에 간과
  되어 누락되었던 메서드들이 추가되었습니다:

     * "list" 프록시용 "clear()" 및 "copy()"

     * "dict" 프록시용 "fromkeys()", *reversed(d)*, *d | {}*, *{} |
       d*, 그리고 *d |= {'b': 2}*

  (Roy Hyunjin Han이 gh-103134를 통해 기능을 구현하였습니다.)

* "SyncManager.set()"을 통해 공유 "set" 객체에 대한 지원을 추가하였습
  니다. "Manager()" 메서드에서 "set()"을 이제 사용할 수 있습니다.
  (Mingyu Park이 gh-129949를 통해 기능을 구현하였습니다.)

* "multiprocessing.Process" 객체에 "interrupt()"를 추가하였습니다. 해
  당하는 메서드는 자식 프로세스에 "SIGINT"를 보내 자식 프로세스를 종료
  합니다. 이를 통해 "finally" 절이 종료된 프로세스의 스택 트레이스를
  출력할 수 있습니다. (Artem Pulkin이 gh-131913를 통해 기능을 구현하였
  습니다.)


operator
--------

* "is_none()" 및 "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를 통해 기능을 구현하였습
  니다.)


os
--

* "reload_environ()" 함수를 추가하였습니다. 해당하는 함수는
  "os.putenv()"와 "os.unsetenv()" 혹은 같은 프로세스 내에서 파이썬 외
  부에서 이루어진 환경 변경 사항으로 "os.environ" 및 "os.environb"를
  갱신합니다. (Victor Stinner가 gh-120057를 통해 기능을 구현하였습니다
  .)

* "os" 모듈에 "SCHED_DEADLINE" 및 "SCHED_NORMAL" 상수를 추가하였습니다
  . (James Roy가 gh-127688를 통해 기능을 구현하였습니다.)

* "readinto()" 함수를 추가하였습니다. 해당하는 함수는 파일 디스크립터
  에서 버퍼 객체로 읽어 들입니다. (Cody Maloney가 gh-129205를 통해 기
  능을 구현하였습니다.)


os.path
-------

* "realpath()"의 *strict* 매개변수는 새로운 값인 "ALLOW_MISSING"을 받
  아들입니다. 해당하는 값을 사용하면 "FileNotFoundError"를 제외한 에러
  는 다시 발생하며, 결과 경로는 존재하지 않을 수 있지만 심볼릭 링크는
  포함하지 않습니다. (Petr Viktorin이 **CVE 2025-4517**를 위해 기능을
  구현하였습니다.)


pathlib
-------

* "pathlib.Path" 클래스에 파일과 디렉터리를 재귀적으로 복사하거나 이동
  하는 메서드를 추가하였습니다:

  * "copy()"는 파일 혹은 디렉터리 트리를 대상 지점으로 복사합니다.

  * "copy_into()"는 대상 디렉터리 *안으로* 복사합니다.

  * "move()"는 파일 혹은 디렉터리 트리를 대상으로 이동합니다.

  * "move_into()"는 대상 디렉터리 *안으로* 이동합니다.

  (Barney Gale이 gh-73991를 통해 기능을 구현하였습니다.)

* "info" 어트리뷰트를 추가하였습니다. 해당하는 어트리뷰트는 새로운
  "pathlib.types.PathInfo" 프로토콜을 구현하는 객체를 저장합니다. 해당
  하는 객체는 파일 형식을 조회하고 "stat()" 결과를 내부적으로 캐시하는
  기능을 지원합니다. "iterdir()"가 생성하는 경로 객체는 부모 디렉터리
  를 스캔하여 얻은 파일 형식 정보로 초기화됩니다. (Barney Gale이
  gh-125413를 통해 기능을 구현하였습니다.)


pdb
---

* "pdb" 모듈은 이제 새로운 "-p PID" 명령줄 옵션을 사용하여 실행 중인
  파이썬 프로세스에 원격으로 연결하는 기능을 지원합니다:

     python -m pdb -p 1234

  해당하는 명령은 지정된 PID의 파이썬 프로세스에 연결하여 대화형으로
  디버깅할 수 있게 합니다. 파이썬 인터프리터의 동작 방식상, 시스템 호
  출에서 차단되어 있거나 I/O를 기다리는 원격 프로세스에 연결하는 것은
  다음 바이트 코드 명령어가 실행되거나 프로세스가 신호를 수신한 후에야
  작동합니다.

  해당하는 기능은 PEP 768과 새로운 "sys.remote_exec()" 함수를 사용하여
  원격 프로세스에 연결하고 PDB 명령을 그 프로세스로 보냅니다.

  (Matt Wozniski와 Pablo Galindo가 gh-131591를 통해 기능을 구현하였습
  니다.)

* 하드코딩된 중단점("breakpoint()" 및 "set_trace()")은 이제 매번 새로
  운 "Pdb" 인스턴스를 생성하는 대신, "set_trace()"를 호출한 가장 최근
  의 인스턴스를 재사용합니다. 그 결과 "display" 및 "commands" 같은 모
  든 인스턴스별 데이터가 하드코딩된 중단점 간에 유지됩니다. (Tian Gao
  가 gh-121450를 통해 기능을 구현하였습니다.)

* "pdb.Pdb" 클래스에 새로운 인자 *mode*를 추가하였습니다. "pdb"가
  *inline* 모드일 때 *restart* 명령을 비활성화하였습니다. (Tian Gao가
  gh-123757를 통해 기능을 구현하였습니다.)

* 사용자가 *inline* 모드에서 "pdb"를 종료하려고 할 때 확인 프롬프트가
  표시됩니다. *y*, *Y*, *<Enter>* 혹은 *EOF*는 "bdb.BdbQuit"를 발생시
  키는 대신 종료를 확인하고 "sys.exit()"를 호출합니다. (Tian Gao가
  gh-124704를 통해 기능을 구현하였습니다.)

* "breakpoint()" 혹은 "pdb.set_trace()" 같은 인라인 중단점은 *skip* 패
  턴이 있더라도 이를 무시하고 항상 호출 프레임에서 프로그램을 중지합니
  다. (Tian Gao가 gh-130493를 통해 기능을 구현하였습니다.)

* "pdb" 다중 행 입력에서 줄 시작 부분에 *<tab>*을 입력하면 이제 *t* 문
  자를 삽입하는 대신 4칸 공백 들여쓰기가 채워집니다. (Tian Gao가
  gh-130471를 통해 기능을 구현하였습니다.)

* "pdb" 다중 행 입력에 자동 들여쓰기가 도입되었습니다. 자동 들여쓰기는
  마지막 줄의 들여쓰기를 유지하거나, 새로운 코드 블록을 감지하면 4칸
  공백 들여쓰기를 삽입합니다. (Tian Gao가 gh-133350를 통해 기능을 구현
  하였습니다.)

* 해당하는 경우 현재 asyncio 태스크에 액세스할 수 있도록 *$_asynctask*
  가 추가되었습니다. (Tian Gao가 gh-124367를 통해 기능을 구현하였습니
  다.)

* asyncio 코루틴 디버깅을 지원하기 위해 "pdb.set_trace_async()" 함수가
  추가되었습니다. 해당하는 함수에서는 "await" 문장이 지원됩니다. (Tian
  Gao가 gh-132576를 통해 기능을 구현하였습니다.)

* "pdb"에서 표시되는 소스 코드는 문법 강조됩니다. 해당하는 기능은 새로
  추가된 "pdb.Pdb" 클래스의 *colorize* 인자뿐만 아니라, 기본 *대화형*
  셸과 동일한 메서드들로도 제어할 수 있습니다. (Tian Gao와 Łukasz
  Langa가 gh-133355를 통해 기능을 구현하였습니다.)


pickle
------

* "pickle" 모듈의 기본 프로토콜 버전을 5로 설정하였습니다. 자세한 내용
  은 pickle 프로토콜을 참조해주시기를 부탁드립니다.

* 에러의 발생 소스를 식별할 수 있도록 pickle 직렬화 에러에 예외 노트를
  추가하였습니다. (Serhiy Storchaka가 gh-122213를 통해 기능을 구현하였
  습니다.)


platform
--------

* "platform" 모듈에서 캐시된 결과를 무효화하는 함수인
  "invalidate_caches()"를 추가하였습니다. (Bénédikt Tran이 gh-122549를
  통해 기능을 구현하였습니다.)


pydoc
-----

* 도움말 출력에서 *어노테이션*은 이제 원본 소스에 더 가까운 형식으로
  표시됩니다. (Jelle Zijlstra가 gh-101552를 통해 기능을 구현하였습니다
  .)


re
--

* "정규 표현식"에서 *z*를 *Z*의 동의어로 지원합니다. *Z*는 미묘하게 다
  른 동작을 하지만, *z*는 다른 많은 정규 표현식 엔진에서 모호하지 않게
  해석됩니다. (Serhiy Storchaka가 gh-133306를 통해 기능을 구현하였습니
  다.)

* "정규 표현식"에서 *B*는 이제 빈 입력 문자열과 일치하므로, 이제 항상
  *b*의 반대가 됩니다. (Serhiy Storchaka가 gh-124130를 통해 기능을 구
  현하였습니다.)


socket
------

* Bluetooth 소켓 지원을 개선하고 수정하였습니다.

  * NetBSD 및 DragonFly BSD에서 Bluetooth 소켓 지원을 수정하였습니다.
    (Serhiy Storchaka가 gh-132429를 통해 기능을 구현하였습니다.)

  * FreeBSD에서 "BTPROTO_HCI" 지원을 수정하였습니다. (Victor Stinner가
    gh-111178를 통해 기능을 구현하였습니다.)

  * FreeBSD에서 "BTPROTO_SCO" 지원을 추가하였습니다. (Serhiy Storchaka
    가 gh-85302를 통해 기능을 구현하였습니다.)

  * FreeBSD에서 "BTPROTO_L2CAP" 주소의 *cid* 및 *bdaddr_type* 지원을
    추가하였습니다. (Serhiy Storchaka가 gh-132429를 통해 기능을 구현하
    였습니다.)

  * Linux에서 "BTPROTO_HCI" 주소의 *channel* 지원을 추가하였습니다.
    (Serhiy Storchaka가 gh-70145를 통해 기능을 구현하였습니다.)

  * Linux에서 "BTPROTO_HCI"의 주소로 정수를 허용합니다. (Serhiy
    Storchaka가 gh-132099를 통해 기능을 구현하였습니다.)

  * "BTPROTO_L2CAP"에 대해 "getsockname()"에서 *cid*를 반환합니다.
    (Serhiy Storchaka가 gh-132429를 통해 기능을 구현하였습니다.)

  * 많은 새로운 상수를 추가하였습니다. (Serhiy Storchaka가 gh-132734를
    통해 기능을 구현하였습니다.)


ssl
---

* "HAS_PHA" 논리(boolean) 값은 "ssl" 모듈이 TLSv1.3 핸드셰이크 후 클라
  이언트 인증(PHA)을 지원하는지 나타냅니다. (Will Childs-Klein이
  gh-128036를 통해 기능을 구현하였습니다.)


struct
------

* "struct" 모듈에서 float complex 및 double complex C 형을 지원합니다(
  포맷 문자는 각각 *'F'* 및 *'D'*입니다). (Sergey B Kirpichev가
  gh-121249를 통해 기능을 구현하였습니다.)


symtable
--------

* 다음 "Symbol" 메서드들을 드러냅니다:

  * "is_comp_cell()"

  * "is_comp_iter()"

  * "is_free_class()"

  (Bénédikt Tran이 gh-120029를 통해 기능을 구현하였습니다.)


sys
---

* 특수화된 파이썬 빌드에만 존재하는, 이전에는 문서화되지 않았던 특수
  함수 "sys.getobjects()"는 이제 호출된 인터프리터가 아닌 다른 인터프
  리터의 객체를 반환할 수 있습니다. (Eric Snow가 gh-125286를 통해 기능
  을 구현하였습니다.)

* 객체가 *불멸*인지 판별하기 위한 "sys._is_immortal()"를 추가하였습니
  다. (Peter Bierma가 gh-128509를 통해 기능을 구현하였습니다.)

* FreeBSD에서 "sys.platform"는 더 이상 주된 버전의 번호를 포함하지 않
  습니다. *'freebsd13'* 혹은 *'freebsd14'* 대신 항상 *'freebsd'*입니다
  . (Michael Osipov가 gh-129393를 통해 기능을 구현하였습니다.)

* "sys._clear_type_cache()" 함수에 대해 "DeprecationWarning"를 발생시
  킵니다. 해당하는 함수는 파이썬 3.13에서 폐지되었지만, 런타임 경고를
  발생시키지 않았습니다.

* 새로운 외부 디버거 인터페이스를 구현하기 위해 "sys.remote_exec()"를
  추가하였습니다. 자세한 내용은 PEP 768를 참조해주시기를 부탁드립니다.
  (Pablo Galindo Salgado, Matt Wozniski, 그리고 Ivona Stojanovic이
  gh-131591를 통해 기능을 구현하였습니다.)

* JIT 컴파일을 인트로스펙션하기 위한 유틸리티를 포함하는 "sys._jit" 이
  름 공간을 추가하였습니다. (Brandt Bucher가 gh-133231를 통해 기능을
  구현하였습니다.)


sys.monitoring
--------------

* 두 개의 새 모니터링 이벤트 "BRANCH_LEFT" 및 "BRANCH_RIGHT"를 추가하
  였습니다. 해당하는 이벤트들은 "BRANCH" 이벤트를 대체하며, 해당 이벤
  트는 폐지되었습니다. (Mark Shannon이 gh-122548를 통해 기능을 구현하
  였습니다.)

* Add "sys.monitoring.clear_tool_id()" to unregister all events and
  callback functions associated with a tool identifier.
  "sys.monitoring.free_tool_id()" now calls it before releasing the
  tool identifier, instead of leaving its events and callbacks
  registered. (Contributed by Tian Gao in gh-116750.)


sysconfig
---------

* 윈도우에서 "get_config_vars()" 함수에 *ABIFLAGS* 키를 추가하였습니다
  . (Xuehai Pan이 gh-131799를 통해 기능을 구현하였습니다.)


tarfile
-------

* "data_filter()"는 이제 경로 탐색 공격을 방지하기 위해 심볼릭 링크 대
  상을 정규화합니다. (Petr Viktorin이 gh-127987 및 **CVE 2025-4138**를
  통해 기능을 구현하였습니다.)

* "extractall()"은 디렉터리가 제거되었거나 다른 종류의 파일로 대체된
  경우 이제 디렉터리 어트리뷰트 수정을 건너뜁니다. (Petr Viktorin이
  gh-127987 및 **CVE 2024-12718**를 통해 기능을 구현하였습니다.)

* "extract()" 및 "extractall()"은 이제 링크(하드 링크 혹은 심볼릭 링크
  )를 다른 아카이브 멤버의 사본으로 대체할 때와 디렉터리 어트리뷰트를
  수정할 때 추출 필터를 (재)적용합니다. 전자의 경우 새 예외
  "LinkFallbackError"를 발생시킵니다. (Petr Viktorin이 **CVE
  2025-4330** 및 **CVE 2024-12718**를 위해 기능을 구현하였습니다.)

* "extract()" 및 "extractall()"은 "errorlevel()"이 0일 때 거부된 멤버
  를 더 이상 추출하지 않습니다. (Matt Prodani와 Petr Viktorin이
  gh-112887 및 **CVE 2025-4435**를 통해 기능을 구현하였습니다.)


threading
---------

* "threading.Thread.start()"는 이제 운영 체제 스레드 이름을
  "threading.Thread.name"으로 설정합니다. (Victor Stinner가 gh-59705를
  통해 기능을 구현하였습니다.)


tkinter
-------

* "tkinter" 위젯 메서드 "after()" 및 "after_idle()"이 키워드 인자를 받
  도록 하였습니다. (Zhikang Yan이 gh-126899를 통해 기능을 구현하였습니
  다.)

* "tkinter.OptionMenu" 및 "tkinter.ttk.OptionMenu"에 이름을 지정할 수
  있는 기능을 추가하였습니다. (Zhikang Yan이 gh-130482를 통해 기능을
  구현하였습니다.)


turtle
------

* "turtle.fill()", "turtle.poly()", 그리고 "turtle.no_animation()"에
  대한 컨텍스트 관리자를 추가하였습니다. (Marie Roald와 Yngve Mardal
  Moe가 gh-126350를 통해 기능을 구현하였습니다.)


types
-----

* "types.UnionType"은 이제 "typing.Union"의 에일리어스입니다. 자세한
  내용은 아래를 참조해주시기를 부탁드립니다. (Jelle Zijlstra가
  gh-105499를 통해 기능을 구현하였습니다.)


typing
------

* "types.UnionType" 및 "typing.Union" 형은 이제 서로의 에일리어스입니
  다. 즉, 이전 스타일의 유니언(*Union[int, str]*로 생성됨)과 새로운 스
  타일의 유니언(*int | str*)이 모두 이제 같은 런타임 형의 인스턴스를
  생성합니다. 이로써 두 문법 사이의 동작은 통합되지만, 런타임에 형을
  인트로스펙션하는 사용자에게 영향을 줄 수 있는 몇 가지 동작 차이가 생
  깁니다:

  * 유니언을 생성하는 두 문법은 이제 모두 "repr()"에서 같은 문자열 표
    현을 생성합니다. 예를 들어, *repr(Union[int, str])*는 이제
    *"typing.Union[int, str]"* 대신 *"int | str"*입니다.

  * 이전 문법을 사용해 생성한 유니언은 더 이상 캐시되지 않습니다. 이전
    에는 *Union[int, str]*을 여러 번 실행하면 같은 객체가 반환되었습니
    다. 즉, *Union[int, str] is Union[int, str]*가 *True*였습니다. 그
    러나 이제는 서로 다른 두 객체를 반환합니다. 유니언의 동등성을 비교
    할 때는 *is*가 아니라 *==*를 사용해주시기를 부탁드립니다. 새로운
    스타일의 유니언은 이런 방식으로 캐시된 적이 없습니다. 해당하는 변
    경으로 인해 *typing.Union*을 서브스크립팅하여 생성한 많은 수의 유
    니언을 사용하는 일부 프로그램의 메모리 사용량이 증가할 수 있습니다
    . 그러나 여러 요인이 이 비용을 상쇄합니다. **PEP 649** 때문에 파이
    썬 3.14에서는 어노테이션에 사용된 유니언의 값이 더 이상 기본적으로
    구해지지 않으며, "types.UnionType" 인스턴스 자체는 이전 파이썬 버
    전에서 *Union[]*이 반환하던 객체보다 훨씬 작고, 캐시를 제거하면 약
    간의 공간도 절약됩니다. 따라서 이 변경으로 대부분의 사용자에게 메
    모리 사용량이 크게 증가할 가능성은 낮습니다.

  * 이전에는 이전 스타일의 유니언이 비공개 클래스
    *typing._UnionGenericAlias*를 사용해 구현되었습니다. 해당하는 클래
    스는 구현에 더 이상 필요하지 않지만, 하위 호환성을 위해 유지되어
    왔으며 파이썬 3.17에서 제거될 예정입니다. 사용자는 비공개 구현 세
    부 사항에 의존하는 대신 "get_origin()" 및 "typing.get_args()" 같은
    문서화된 인트로스펙션 도우미를 사용해주시기를 부탁드립니다.

  * 이제 "typing.Union" 자체를 "isinstance()" 검사에 사용할 수 있습니
    다. 예를 들어, *isinstance(int | str, typing.Union)*는 *True*를 반
    환합니다. 이전에는 해당하는 코드가 "TypeError"를 발생시켰습니다.

  * "typing.Union" 객체의 "__args__" 어트리뷰트는 더 이상 쓰기 가능하
    지 않습니다.

  * "Union" 객체에 더 이상 어떤 어트리뷰트도 설정할 수 없습니다. 해당
    하는 동작은 이전 버전에서도 던더(dunder) 어트리뷰트에 대해서만 가
    능했으며, 작동한다고 문서화된 적이 없고, 많은 경우에 미묘하게 깨져
    있었습니다.

  (Jelle Zijlstra가 gh-105499를 통해 기능을 구현하였습니다.)

* "TypeAliasType"는 이제 스타 언패킹을 지원합니다.


unicodedata
-----------

* 유니코드 데이터베이스가 유니코드 16.0.0으로 업데이트되었습니다.


unittest
--------

* "unittest"의 출력에는 이제 기본적으로 색상이 적용됩니다. 해당하는 기
  능은 환경 변수를 통해 제어할 수 있습니다. (Hugo van Kemenade가
  gh-127221를 통해 기능을 구현하였습니다.)

* unittest의 테스트 발견 기능은 *이름 공간 패키지*를 다시 시작 디렉터
  리로 지원합니다. 해당 지원은 파이썬 3.11에서 제거되었습니다. (Jacob
  Walls가 gh-80958를 통해 기능을 구현하였습니다.)

* "TestCase" 클래스에 더 특화된 테스트를 제공하는 여러 새로운 메서드가
  추가되었습니다.

  * "assertHasAttr()"와 "assertNotHasAttr()"는 객체에 특정 어트리뷰트
    가 있는지 검사합니다.

  * "assertIsSubclass()"와 "assertNotIsSubclass()"는 객체가 특정 클래
    스나 클래스 튜플에 포함된 클래스 중 하나의 하위 클래스인지 검사합
    니다.

  * "assertStartsWith()", "assertNotStartsWith()", "assertEndsWith()"
    및 "assertNotEndsWith()"는 유니코드 문자열 혹은 바이트열이 특정 문
    자열로 시작하거나 끝나는지 검사합니다.

  (Serhiy Storchaka가 gh-71339를 통해 기능을 구현하였습니다.)


urllib
------

* "urllib.request"의 HTTP 다이제스트 인증 알고리즘을 **RFC 7616**에 지
  정된 SHA-256 다이제스트 인증을 지원하도록 업그레이드하였습니다.
  (Calvin Bui가 gh-128193를 통해 기능을 구현하였습니다.)

* *file:* URL을 파싱하고 내보낼 때 사용 편의성과 표준 준수성을 개선하
  였습니다.

  "url2pathname()"에서:

  * 새로운 *require_scheme* 인자를 참으로 설정하면 완전한 URL을 허용합
    니다.

  * URL 권한이 로컬 호스트명과 일치하면 이를 버립니다.

  * 새로운 *resolve_host* 인자를 참으로 설정했을 때 URL 권한이 로컬 IP
    주소로 해석되면 이를 버립니다.

  * URL 쿼리 및 프래그먼트 구성 요소를 버립니다.

  * URL 권한이 로컬이 아니면 "URLError"를 발생시킵니다. 단, 윈도우에서
    는 이전처럼 UNC 경로를 반환합니다.

  "pathname2url()"에서:

  * 새로운 *add_scheme* 인자를 참으로 설정하면 완전한 URL을 반환합니다
    .

  * 경로가 슬래시로 시작하면 빈 URL 권한을 포함합니다. 예를 들어, 경로
    */etc/hosts*는 URL *///etc/hosts*로 변환됩니다.

  윈도우에서는 드라이브 문자가 더 이상 대문자로 변환되지 않으며, 드라
  이브 문자 뒤에 오지 않는 *:* 문자는 더 이상 "OSError" 예외를 발생시
  키지 않습니다.

  (Barney Gale이 gh-125866를 통해 기능을 구현하였습니다.)


uuid
----

* **RFC 9562**에 지정된 대로 "uuid6()", "uuid7()" 및 "uuid8()"를 통해
  각각 UUID 버전 6, 7 및 8에 대한 지원을 추가하였습니다. (Bénédikt
  Tran이 gh-89083를 통해 기능을 구현하였습니다.)

* "NIL"과 "MAX"는 이제 **RFC 9562**에 정의된 Nil 및 Max UUID 형식을 나
  타내는 데 사용할 수 있습니다. (Nick Pope가 gh-128427를 통해 기능을
  구현하였습니다.)

* "python -m uuid --count"를 통해 명령줄에서 여러 UUID를 동시에 생성할
  수 있습니다. (Simon Legner가 gh-131236를 통해 기능을 구현하였습니다
  .)


webbrowser
----------

* "BROWSER" 환경 변수에 지정된 이름은 이제 항상 새로운 브라우저 명령을
  생성하는 대신 "webbrowser" 모듈에 이미 등록된 브라우저를 참조할 수
  있습니다.

  이를 통해 macOS에서 "BROWSER"를 지원되는 브라우저 중 하나의 값으로
  설정할 수 있습니다.


zipfile
-------

* "ZipFile.writestr"에서 사용하는 "ZipInfo" 객체의 적절한 기본값을 결
  정하는 메서드인 "ZipInfo._for_archive"가 추가되었습니다. (Bénédikt
  Tran이 gh-123424를 통해 기능을 구현하였습니다.)

* "ZipFile.writestr()"는 이제 재현 가능한 빌드를 더 잘 지원하기 위해
  "SOURCE_DATE_EPOCH" 환경 변수를 따릅니다. (Jiahao Li가 gh-91279를 통
  해 기능을 구현하였습니다.)


최적화된 점
===========

* 여러 표준 라이브러리 모듈의 임포트 시간이 개선되었습니다. 여기에는
  "annotationlib", "ast", "asyncio", "base64", "cmd", "csv",
  "gettext", "importlib.util", "locale", "mimetypes", "optparse",
  "pickle", "pprint", "pstats", "shlex", "socket", "string",
  "subprocess", "threading", "tomllib", "types", 그리고 "zipfile"가 포
  함됩니다.

  (Adam Turner, Bénédikt Tran, Chris Markiewicz, Eli Schwartz, Hugo
  van Kemenade, Jelle Zijlstra 등이 gh-118761를 통해 기능을 구현하였습
  니다.)

* 인터프리터는 이제 안전한 경우 내부적으로 일부 참조 횟수 변경을 피합
  니다. 이로 인해 이전 버전의 파이썬과 비교했을 때 "sys.getrefcount()"
  및 "Py_REFCNT()"에서 반환되는 값이 달라질 수 있습니다. 자세한 내용은
  아래를 참조해주시기를 부탁드립니다.


asyncio
-------

* 표준 벤치마크 결과는 "네이티브 태스크"를 위한 새로운 스레드별 이중
  연결 리스트가 구현됨에 따라 10-20% 개선되었고, 메모리 사용량도 줄었
  습니다. 이를 통해 python -m asyncio pstree와 같은 외부 인트로스펙션
  도구가 모든 스레드에서 실행 중인 asyncio 태스크의 호출 그래프를 인트
  로스펙션할 수 있습니다. (Kumar Aditya가 gh-107803를 통해 기능을 구현
  하였습니다.)

* 해당하는 모듈은 이제 *자유 스레딩 빌드*를 첫 번째 우선 순위로 지원합
  니다. 이를 통해 서로 다른 스레드의 여러 이벤트 루프를 병렬로 실행할
  수 있으며, 스레드 수에 따라 선형적으로 확장됩니다. (Kumar Aditya가
  gh-128002를 통해 기능을 구현하였습니다.)


base64
------

* "b16decode()"는 이제 최대 6배 빨라졌습니다. (Bénédikt Tran, Chris
  Markiewicz와 Adam Turner가 gh-118761를 통해 기능을 구현하였습니다.)


bdb
---

* 기본 디버거에는 이제 "sys.monitoring" 기반 백엔드가 있으며, "Bdb" 클
  래스의 새로운 *backend* 매개변수에 *'monitoring'*을 전달하여 이를 선
  택할 수 있습니다. (Tian Gao가 gh-124533를 통해 기능을 구현하였습니다
  .)


difflib
-------

* "IS_LINE_JUNK()" 함수는 이제 최대 2배 빨라졌습니다. (Adam Turner와
  Semyon Moroz가 gh-130167를 통해 기능을 구현하였습니다.)


gc
--

* **From Python 3.14.5 onwards:**

  Python 3.14.0-3.14.4 shipped with a new incremental garbage
  collector. However, due to a number of reports of significant memory
  pressure in production environments, it has been reverted back to
  the generational GC from 3.13. This is the GC now used in Python
  3.14.5 and later.

* **Previously in Python 3.14.0-3.14.4:**

  새로운 점진적인 가비지 수거기로 인해 더 큰 힙에서는 최대 일시 중지
  시간이 10배 이상 줄어듭니다.

  해당하는 최적화로 인해 "get_threshold()"와 "set_threshold()"의 결과
  의미가 변경되었으며, "get_count()"와 "get_stats()"의 결과 의미도 함
  께 변경되었습니다.

  * 하위 호환성을 위해 "get_threshold()"는 계속 세 항목 튜플을 반환합
    니다. 첫 번째 값은 이전과 마찬가지로 젊은 컬렉션의 임계값입니다.
    두 번째 값은 오래된 컬렉션이 스캔되는 비율을 결정합니다(기본값은
    10이며, 값이 클수록 오래된 컬렉션이 더 천천히 스캔됨을 의미합니다
    ). 세 번째 값은 이제 의미가 없으며 항상 0입니다.

  * "set_threshold()"는 이제 두 번째 이후의 항목을 모두 무시합니다.

  * "get_count()"와 "get_stats()"는 계속 같은 형식의 결과를 반환합니다
    . 유일한 차이점은 결과가 젊은 세대, 노화 세대, 오래된 세대를 가리
    키는 대신, 젊은 세대와 오래된 세대의 오래된 공간 및 수거 공간을 가
    리킨다는 점입니다.

  요약하면, 순환 가비지 수거의 동작을 조작하려고 한 코드는 의도한 대로
  정확히 작동하지 않을 수 있지만, 해로울 가능성은 매우 낮습니다. 그 밖
  의 모든 코드는 정상적으로 작동합니다.

  (Mark Shannon이 gh-108362를 통해 기능을 구현하였습니다.)


io
--

* 파일을 열고 읽을 때 이제 더 적은 시스템 호출이 실행됩니다. 운영 체제
  에 캐시된 작은 파일을 끝까지 읽는 작업은 최대 15% 더 빨라졌습니다.
  (Cody Maloney와 Victor Stinner가 gh-120754 및 gh-90102를 통해 기능을
  구현하였습니다.)


pathlib
-------

* "Path.read_bytes"는 이제 버퍼링되지 않는 모드로 파일을 엽니다. 이를
  통해, 전체 읽기 속도가 9%에서 17%까지 빨라졌습니다. (Cody Maloney가
  gh-120754를 통해 기능을 구현하였습니다.)


pdb
---

* "pdb"는 이제 "sys.settrace()" 혹은 "sys.monitoring" 기반의 두 백엔드
  를 지원합니다. pdb CLI 혹은 "breakpoint()"를 사용하면 항상
  "sys.monitoring" 백엔드가 사용됩니다. "pdb.Pdb"와 그 파생 클래스를
  명시적으로 인스턴스화하면 기본적으로 "sys.settrace()" 백엔드를 사용
  하며, 해당하는 동작은 구성할 수 있습니다. (Tian Gao가 gh-124533를 통
  해 기능을 구현하였습니다.)


textwrap
--------

* Optimize the "dedent()" function, improving performance by an
  average of 2.4x, with larger improvements for bigger inputs, and fix
  a bug with incomplete normalization of blank lines with whitespace
  characters other than space and tab.


uuid
----

* "uuid3()"와 "uuid5()"는 이제 둘 다 16바이트 이름에 대해 약 40%, 1024
  바이트 이름에 대해 약 20% 더 빠릅니다. 보다 더 긴 항목들에 대한 성능
  은 변경되지 않았습니다. (Bénédikt Tran이 gh-128150를 통해 기능을 구
  현하였습니다.)

* "uuid4()"는 이제 약 30% 빨라졌습니다. (Bénédikt Tran이 gh-128150를
  통해 기능을 구현하였습니다.)


zlib
----

* 윈도우의 기본 바이너리에서는 이제 "zlib" 모듈의 구현으로 zlib-ng이
  사용됩니다. *zlib-ng*과 이전에 사용되던 *zlib* 구현 사이에는 알려진
  비호환성이 없습니다. 그 결과 모든 압축 수준에서 성능이 향상될 것으로
  예상됩니다.

  *zlib.Z_BEST_SPEED* (*1*)는 이전 구현보다 압축률이 상당히 낮을 수 있
  지만, 압축에 걸리는 시간도 크게 줄일 수 있다는 점은 주목할 만합니다.

  (Steve Dower가 gh-91349를 통해 기능을 구현하였습니다.)


삭제된 항목들
=============


argparse
--------

* "BooleanOptionalAction"의 *type*, *choices*, *metavar* 매개변수를 제
  거합니다. 해당하는 매개변수들은 파이썬 3.12부터 폐지되었습니다.
  (Nikita Sobolev가 gh-118805를 통해 기능을 구현하였습니다.)

* 인자 그룹에서 "add_argument_group()"를 호출하면 이제 "ValueError"가
  발생합니다. 마찬가지로, 상호 배타적 그룹에서 "add_argument_group()"
  나 "add_mutually_exclusive_group()"를 호출해도 이제 둘 다
  "ValueError"가 발생합니다. 해당하는 '중첩'은 지원된 적이 없으며, 올
  바르게 작동하지 않는 경우가 많았고, 상속을 통해 의도치 않게 노출되었
  습니다. 해당하는 기능은 파이썬 3.11부터 폐지되었습니다. (Savannah
  Ostrowski가 gh-127186를 통해 기능을 구현하였습니다.)


ast
---

* 파이썬 3.8부터 "Constant"의 폐지된 에일리어스였으며 파이썬 3.12부터
  폐지 경고를 발생시켜 온 다음 클래스들을 제거합니다:

  * "Bytes"

  * "Ellipsis"

  * "NameConstant"

  * "Num"

  * "Str"

  이러한 제거의 결과로, 커스텀 "NodeVisitor" 하위 클래스에 정의된 사용
  자 정의 *visit_Num*, *visit_Str*, *visit_Bytes*,
  *visit_NameConstant* 및 *visit_Ellipsis* 메서드들은 "NodeVisitor" 하
  위 클래스가 AST를 방문할 때 더 이상 호출되지 않습니다. 대신
  *visit_Constant* 메서드를 정의해주시기를 부탁드립니다.

  (Alex Waygood이 gh-119562를 통해 기능을 구현하였습니다.)

* 이제 제거된 AST 클래스와의 호환성을 위해 "ast.Constant"에 존재했던
  다음 폐지된 프로퍼티들을 제거합니다:

  * "Constant.n"

  * "Constant.s"

  대신 "Constant.value"를 사용해주시기를 부탁드립니다. (Alex Waygood이
  gh-119562를 통해 기능을 구현하였습니다.)


asyncio
-------

* 파이썬 3.12부터 폐지되었던, 다음과 같은 클래스, 메서드, 함수들을 제
  거합니다:

  * "AbstractChildWatcher"

  * "FastChildWatcher"

  * "MultiLoopChildWatcher"

  * "PidfdChildWatcher"

  * "SafeChildWatcher"

  * "ThreadedChildWatcher"

  * "AbstractEventLoopPolicy.get_child_watcher()"

  * "AbstractEventLoopPolicy.set_child_watcher()"

  * "get_child_watcher()"

  * "set_child_watcher()"

  (Kumar Aditya가 gh-120804를 통해 기능을 구현하였습니다.)

* "asyncio.get_event_loop()"는 이제 현재의 이벤트 루프가 없으면
  "RuntimeError"를 발생시키며, 더 이상 묵시적인 방식으로 이벤트 루프를
  생성하지 않습니다.

  (Kumar Aditya가 gh-126353를 통해 기능을 구현하였습니다.)

  "asyncio.get_event_loop()"를 사용하는 몇 가지 패턴이 있으며, 그 대부
  분은 "asyncio.run()"으로 대체할 수 있습니다.

  비동기 함수를 실행하는 경우에는 단순히 "asyncio.run()"를 사용해주시
  기를 부탁드립니다.

  이전 방식:

     async def main():
         ...


     loop = asyncio.get_event_loop()
     try:
         loop.run_until_complete(main())
     finally:
         loop.close()

  현재의 방식:

     async def main():
         ...

     asyncio.run(main())

  예를 들어, 소켓에서 수신 대기하는 서버처럼 무언가를 시작한 다음 계속
  실행해야 하는 경우에는 "asyncio.run()"과 "asyncio.Event"를 사용해주
  시기를 부탁드립니다.

  이전 방식:

     def start_server(loop): ...

     loop = asyncio.get_event_loop()
     try:
         start_server(loop)
         loop.run_forever()
     finally:
         loop.close()

  현재의 방식:

     def start_server(loop): ...

     async def main():
         start_server(asyncio.get_running_loop())
         await asyncio.Event().wait()

     asyncio.run(main())

  이벤트 루프에서 무언가를 실행한 뒤 그 주변에 차단 코드를 실행해야 하
  는 경우에는 "asyncio.Runner"를 사용해주시기를 부탁드립니다.

  이전 방식:

     async def operation_one(): ...
     def blocking_code(): ...
     async def operation_two(): ...

     loop = asyncio.get_event_loop()
     try:
         loop.run_until_complete(operation_one())
         blocking_code()
         loop.run_until_complete(operation_two())
     finally:
         loop.close()

  현재의 방식:

     async def operation_one(): ...
     def blocking_code(): ...
     async def operation_two(): ...

     with asyncio.Runner() as runner:
         runner.run(operation_one())
         blocking_code()
         runner.run(operation_two())


email
-----

* 파이썬 3.12에서 폐지되었고 그 이후로 무시되어 온
  "email.utils.localtime()" 함수의 *isdst* 매개변수가 제거되었습니다.
  (Hugo van Kemenade가 gh-118798를 통해 기능을 구현하였습니다.)


importlib.abc
-------------

* 폐지된 "importlib.abc" 클래스들이 제거되었습니다:

  * "ResourceReader" ("TraversableResources"를 사용해주시기를 부탁드립
    니다)

  * "Traversable" ("Traversable"를 사용해주시기를 부탁드립니다)

  * "TraversableResources" ("TraversableResources"를 사용해주시기를 부
    탁드립니다)

  (Jason R. Coombs와 Hugo van Kemenade가 gh-93963를 통해 기능을 구현하
  였습니다.)


itertools
---------

* "itertools" 이터레이터에서 copy, deepcopy 및 pickle 연산에 대한 지원
  이 제거되었습니다. 해당하는 연산은 파이썬 3.12부터
  "DeprecationWarning"을 발생시켜 왔습니다. (Raymond Hettinger가
  gh-101588를 통해 기능을 구현하였습니다.)


pathlib
-------

* "Path"에 추가 키워드 인자를 전달하는 기능 지원이 제거되었습니다. 이
  전 버전에서는 이러한 인자들이 무시되었습니다. (Barney Gale가
  gh-74033를 통해 기능을 구현하였습니다.)

* "PurePath.relative_to()"와 "is_relative_to()"에 추가 위치 인자를 전
  달하는 기능 지원이 제거되었습니다. 이전 버전에서는 이러한 인자들이
  *other*에 이어 붙여졌습니다. (Barney Gale가 gh-78707를 통해 기능을
  구현하였습니다.)


pkgutil
-------

* 파이썬 3.12부터 폐지된 "get_loader()"와 "find_loader()" 함수들이 제
  거되었습니다. (Bénédikt Tran가 gh-97850를 통해 기능을 구현하였습니다
  .)


pty
---

* 파이썬 3.12부터 폐지된 "master_open()"와 "slave_open()" 함수들이 제
  거되었습니다. 대신 "pty.openpty()"를 사용해주시기를 부탁드립니다.
  (Nikita Sobolev가 gh-118824를 통해 기능을 구현하였습니다.)


sqlite3
-------

* "sqlite3" 모듈에서 "version"과 "version_info"가 제거되었습니다. 런타
  임 SQLite 라이브러리의 실제 버전 번호에는 "sqlite_version"과
  "sqlite_version_info"를 사용해주시기를 부탁드립니다. (Hugo van
  Kemenade가 gh-118924를 통해 기능을 구현하였습니다.)

* 이름있는 자리 표시자와 함께 매개변수 시퀀스를 사용하면 이제
  "ProgrammingError"가 발생합니다. 해당하는 방식은 파이썬 3.12부터 폐
  지되었습니다. (Erlend E. Aasland가 gh-118928와 gh-101693를 통해 기능
  을 구현하였습니다.)


urllib
------

* "urllib.parse" 모듈에서 파이썬 3.11부터 폐지된 "Quoter" 클래스가 제
  거되었습니다. (Nikita Sobolev가 gh-118827를 통해 기능을 구현하였습니
  다.)

* "urllib.request" 모듈에서 파이썬 3.3부터 폐지되었던 "URLopener" 및
  "FancyURLopener" 클래스가 제거되었습니다.

  "myopener.open()"는 "urlopen()"로 대체될 수 있습니다.
  "myopener.retrieve()"은 "urlretrieve()"로 대체될 수 있습니다. 오프너
  클래스에 대한 사용자 정의는 사용자 정의 핸들러를 "build_opener()" 으
  로 전달하여 대체될 수 있습니다 (Barney Gale이 gh-84850를 통해 기능을
  구현하였습니다).


폐지된 항목들
=============


새로운 폐지 사항들
------------------

* "complex()" 생성자의 *real* 혹은 *imag* 인자로 복소수를 전달하는 방
  식은 이제 폐지되었습니다. 복소수는 단일 위치 인자로만 전달해야 합니
  다. (Serhiy Storchaka가 gh-109218를 통해 기능을 구현하였습니다.)

* "argparse":

  * "add_argument_group()" 메서드에 문서화되지 않은 키워드 인자
    *prefix_chars*를 전달하는 방식은 이제 폐지되었습니다. (Savannah
    Ostrowski가 gh-125563를 통해 기능을 구현하였습니다.)

  * "argparse.FileType" 형 변환기가 폐지되었습니다. 리소스 관리와 관련
    된 모든 것은 인자가 파싱된 후 하위 단계에서 처리되어야 합니다.
    (Serhiy Storchaka가 gh-58032를 통해 기능을 구현하였습니다.)

* "asyncio":

  * "asyncio.iscoroutinefunction()"은 이제 폐지되었으며 파이썬 3.16에
    서 제거될 예정입니다. 대신 "inspect.iscoroutinefunction()" 함수를
    사용해주시기를 부탁드립니다. (Jiahao Li와 Kumar Aditya가 gh-122875
    를 통해 기능을 구현하였습니다.)

  * "asyncio" 정책 시스템은 폐지되었으며 파이썬 3.16에서 제거될 예정입
    니다. 다음 클래스와 함수들은 폐지되었습니다:

    * "asyncio.AbstractEventLoopPolicy"

    * "asyncio.DefaultEventLoopPolicy"

    * "asyncio.WindowsSelectorEventLoopPolicy"

    * "asyncio.WindowsProactorEventLoopPolicy"

    * "asyncio.get_event_loop_policy()"

    * "asyncio.set_event_loop_policy()"

    원하는 이벤트 루프 구현을 사용하려면 *loop_factory* 인자와 함께
    "asyncio.run()" 함수 혹은 "asyncio.Runner" 클래스를 사용해야 합니
    다.

    예를 들어, 윈도우에서 "asyncio.SelectorEventLoop" 클래스를 사용하
    려면:

       import asyncio

       async def main():
           ...

       asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)

    (Kumar Aditya가 gh-127949를 통해 기여하였습니다.)

* "codecs": "codecs.open()" 함수는 이제 폐지되었으며, 향후 파이썬 버전
  에서 제거될 예정입니다. 대신 "open()" 함수를 사용해주시기를 부탁드립
  니다. (Inada Naoki가 gh-133036를 통해 기능을 구현하였습니다.)

* "ctypes":

  * 윈도우가 아닌 플랫폼에서 MSVC 호환 기본 메모리 레이아웃을 사용하기
    위해 "Structure._pack_"를 설정하는 방식은 이제 폐지되었습니다. 대
    신 "Structure._layout_"를 *'ms'*로 설정하는 방식을 사용해야 하며,
    해당하는 폐지된 방식은 파이썬 3.19에서 제거될 예정입니다. (Petr
    Viktorin이 gh-131747를 통해 기능을 구현하였습니다.)

  * "ctypes.POINTER()" 함수를 문자열과 함께 호출하는 방식은 이제 폐지
    되었습니다. 자기 참조 구조에는 미완성 형을 사용해주시기를 부탁드립
    니다. 또한 내부 *ctypes._pointer_type_cache*도 폐지되었습니다. 업
    데이트된 구현 세부 사항은 "ctypes.POINTER()" 함수를 참조해주시기를
    부탁드립니다. (Sergey Myrianov가 gh-100926를 통해 기능을 구현하였
    습니다.)

* "functools": "functools.reduce()" 함수의 파이썬 구현을 호출할 때
  *function* 혹은 *sequence*를 키워드 인자로 사용하는 방식은 이제 폐지
  되었습니다. 해당하는 매개변수들은 파이썬 3.16에서 위치 전용 매개변수
  로 변경될 예정입니다. (Kirill Podoprigora가 gh-121676를 통해 기능을
  구현하였습니다.)

* "logging": *strm* 인자를 받는 커스텀 로깅 처리기의 지원은 이제 폐지
  되었으며 파이썬 3.16에서 제거될 예정입니다. 대신 *stream* 인자로 처
  리기를 정의해주시기를 부탁드립니다. (Mariusz Felisiak가 gh-115032를
  통해 기능을 구현하였습니다.)

* "mimetypes": "mimetypes.MimeTypes.add_type()" 메서드에서 유효한 확장
  자는 빈 문자열이거나 '.'로 시작해야 합니다. 점으로 시작하지 않는 확
  장자는 폐지되었으며 파이썬 3.16에서 "ValueError"를 발생시킵니다.
  (Hugo van Kemenade가 gh-75223를 통해 기능을 구현하였습니다.)

* "nturl2path": 해당하는 모듈은 이제 폐지되었습니다. 대신
  "urllib.request.url2pathname()" 및 "pathname2url()" 함수를 호출해주
  시기를 부탁드립니다. (Barney Gale이 gh-125866를 통해 기능을 구현하였
  습니다.)

* "os": "os.popen()" 및 "os.spawn*" 함수는 이제 *약하게 폐지된* 상태입
  니다. 해당하는 함수들은 더 이상 새 코드를 작성할 때 사용해서는 안 됩
  니다. 대신 "subprocess" 모듈을 사용하는 것이 권장됩니다. (Victor
  Stinner가 gh-120743를 통해 기능을 구현하였습니다.)

* "pathlib": "pathlib.PurePath.as_uri()"는 이제 폐지되었으며 파이썬
  3.19에서 제거될 예정입니다. 대신 "pathlib.Path.as_uri()" 메서드를 사
  용해주시기를 부탁드립니다. (Barney Gale가 gh-123599를 통해 기능을 구
  현하였습니다.)

* "pdb": 문서화되지 않은 *pdb.Pdb.curframe_locals* 어트리뷰트는 이제
  폐지된 읽기 전용 프로퍼티이며, 향후 파이썬 버전에서 제거될 예정입니
  다. **PEP 667**에 따라 파이썬 3.13에서 추가된 낮은 오버헤드의 동적
  프레임 지역 변수 액세스 덕분에, 이전에 이 어트리뷰트에 저장되던 프레
  임 지역 변수 캐시 참조는 더 이상 필요하지 않습니다. 파생 디버거는 파
  이썬 3.13 및 이후 버전에서 *pdb.Pdb.curframe.f_locals*에 직접 액세스
  해야 합니다. (Tian Gao가 gh-124369와 gh-125951를 통해 기능을 구현하
  였습니다.)

* "symtable": 관심 부족으로 인해 "symtable.Class.get_methods()" 메서드
  는 폐지되었으며 파이썬 3.16에서 제거될 예정입니다. (Bénédikt Tran이
  gh-119698를 통해 기능을 구현하였습니다.)

* "tkinter": "tkinter.Variable" 클래스의 "trace_variable()",
  "trace_vdelete()", 그리고 "trace_vinfo()" 메서드는 이제 폐지되었습니
  다. 대신 "trace_add()", "trace_remove()", 그리고 "trace_info()" 메서
  드를 사용해주시기를 부탁드립니다. (Serhiy Storchaka가 gh-120220를 통
  해 기능을 구현하였습니다.)

* "urllib.parse": "parse_qsl()" 및 "parse_qs()" 함수에서 빈 문자열, 바
  이트열류 객체 및 *None*을 제외하고 *0* 및 *[]* 같은 거짓값을 가진 객
  체를 허용하는 방식은 이제 폐지되었습니다. (Serhiy Storchaka가
  gh-116897를 통해 기능을 구현하였습니다.)


파이썬 3.15에서 제거 예정인 항목들
----------------------------------

* 임포트 시스템:

  * Setting "__cached__" on a module while failing to set
    "__spec__.cached" is deprecated. In Python 3.15, "__cached__" will
    cease to be set or take into consideration by the import system or
    standard library. (gh-97879)

  * 모듈에 "__package__"를 설정하는 동시에 "__spec__.parent"를 설정하
    지 않는 방식의 사용은 사용 지원 중단(deprecated)되었습니다. 파이썬
    3.15부터는 "__package__" 어트리뷰트가 임포트 시스템이나 표준 라이
    브러리에서 더 이상 설정 혹은 고려되지 않습니다. (gh-97879를 참고
    부탁드립니다.)

* "ctypes":

  * 문서화되지 않았던 "ctypes.SetPointerType()" 함수는 파이썬 3.13부터
    사용 지원 중단(deprecated)되었습니다.

* "http.server":

  * The obsolete and rarely used "CGIHTTPRequestHandler" has been
    deprecated since Python 3.13. No direct replacement exists.
    *Anything* is better than CGI to interface a web server with a
    request handler.

  * **python -m http.server** 명령줄 인터페이스의 "--cgi" 플래그는 파
    이썬 3.13부터 사용 지원 중단(deprecated)되었습니다.

* "importlib":

  * *load_module()* 메서드: 대신 *exec_module()*을 사용해주시기를 부탁
    드립니다.

* "pathlib":

  * ".PurePath.is_reserved()" has been deprecated since Python 3.13.
    Use "os.path.isreserved()" to detect reserved paths on Windows.

* "platform":

  * "platform.java_ver()" has been deprecated since Python 3.13. This
    function is only useful for Jython support, has a confusing API,
    and is largely untested.

* "sysconfig":

  * "sysconfig.is_python_build()"의 *check_home* 인자는 파이썬 3.12부
    터 폐지되었습니다.

* "threading":

  * "RLock()" will take no arguments in Python 3.15. Passing any
    arguments has been deprecated since Python 3.14, as the Python
    version does not permit any arguments, but the C version allows
    any number of positional or keyword arguments, ignoring every
    argument.

* "types":

  * "types.CodeType": Accessing "codeobject.co_lnotab" was deprecated
    in **PEP 626** since 3.10 and was planned to be removed in 3.12,
    but it only got a proper "DeprecationWarning" in 3.12. May be
    removed in 3.15. (Contributed by Nikita Sobolev in gh-101866.)

* "typing":

  * "NamedTuple" 클래스를 생성할 때 사용하는 키워드 인자 문법(예를 들
    어, "Point = NamedTuple("Point", x=int, y=int)")은 Python 3.13부터
    사용 지원 중단(deprecated)되었습니다. 해당하는 문법은 문서화되어
    있지 않았습니다. 대신 클래스 기반 구문 문법(syntax)이나 함수형 구
    문 문법(syntax)을 사용해주시기를 부탁드립니다.

  * "TypedDict"의 함수형 문법을 사용할 때 "TD = TypedDict("TD")"와 같
    이 *fields* 매개변수에 값을 전달하지 않거나, "TD = TypedDict("TD",
    None)"와 같이 *None*을 전달하는 방식은 파이썬 3.13부터 사용 지원이
    중단(deprecated)되었습니다. 필드가 없는 (zero-field의) TypedDict를
    만들려면 "class TD(TypedDict): pass"나 "TD = TypedDict("TD", {})"
    를 사용해주시기를 부탁드립니다.

  * The "@typing.no_type_check_decorator" decorator function has been
    deprecated since Python 3.13. After eight years in the "typing"
    module, it has yet to be supported by any major type checker.

* "sre_compile", "sre_constants" and "sre_parse" modules.

* "wave":

  * The "getmark()", "setmark()" and "getmarkers()" methods of the
    "Wave_read" and "Wave_write" classes have been deprecated since
    Python 3.13.

* "zipimport":

  * "zipimport.zipimporter.load_module()" has been deprecated since
    Python 3.10. Use "exec_module()" instead. (gh-125746.)


파이썬 3.16에서 제거 예정인 항목들
----------------------------------

* 임포트 시스템:

  * 모듈에 "__loader__"를 설정하면서 "__spec__.loader"를 설정하지 않는
    방식의 사용에 대한 사용 지원이 중단(deprecated)되었습니다. 파이썬
    3.16부터는 임포트 시스템과 표준 라이브러리가 "__loader__"를 설정
    혹은 참조하지 않습니다.

* "array":

  * "'u'" 포맷 코드("wchar_t")는 문서에서는 파이썬 3.3부터, 런타임에서
    는 파이썬 3.13부터 사용 지원이 중단(deprecated)되었습니다. 유니코
    드 문자에는 대신 "'w'" 포맷 코드("Py_UCS4")를 사용해주시기를 부탁
    드립니다.

* "asyncio":

  * "asyncio.iscoroutinefunction()" 함수는 사용 지원이 중단
    (deprecated)되었으며 파이썬 3.16에서 제거될 예정입니다. 대신
    "inspect.iscoroutinefunction()"을 사용해주시기를 부탁드립니다.
    (Jiahao Li와 Kumar Aditya가 gh-122875를 통해 기능을 구현하였습니다
    .)

  * "asyncio" 정책 시스템은 사용 지원이 중단(deprecated)되었으며 파이
    썬 3.16에서 제거될 예정입니다. 다음 클래스와 함수의 사용 지원이 중
    단(deprecated)되었음에 유의해주십사 부탁드립니다:

    * "asyncio.AbstractEventLoopPolicy"

    * "asyncio.DefaultEventLoopPolicy"

    * "asyncio.WindowsSelectorEventLoopPolicy"

    * "asyncio.WindowsProactorEventLoopPolicy"

    * "asyncio.get_event_loop_policy()"

    * "asyncio.set_event_loop_policy()"

    사용자는 원하는 이벤트 루프 구현을 사용하기 위해 "asyncio.run()"
    또는 "asyncio.Runner"와 *loop_factory*를 함께 사용해야 합니다.

    예를 들어, 윈도우에서 "asyncio.SelectorEventLoop"을 사용하기 위해:

       import asyncio

       async def main():
           ...

       asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)

    (Kumar Aditya가 gh-127949를 통해 기여하였습니다.)

* "builtins":

  * 논리(boolean) 타입에서의 비트별 반전 연산인 *~True* 또는 *~False*
    는 직관적이지 않은 결과인(*-2*, *-1*)를 출력하기 때문에 파이썬
    3.12부터 사용 지원이 중단(deprecated)되었습니다. 논리(boolean) 값
    의 논리적 부정을 위해서는 대신 *not x*를 사용해주시기를 부탁드립니
    다. 정수 값의 비트별 반전이 실제로 필요한 몇 안되는 경우에 대한 필
    요에 있어서는, 명시적으로 *int*로 변환한 뒤 *~int(x)*를 사용해주시
    기를 부탁드립니다.

* "functools":

  * 파이썬 구현인 "functools.reduce()" 함수에서 *function* 또는
    *sequence*를 키워드 인자로 사용하는 것은 파이썬 3.14부터 사용 지원
    중단(deprecated)되었습니다.

* "logging":

  * 사용자 정의 로깅 처리기(custom logging handlers)의 *strm* 인자를
    받는 방식의 사용은 사용 지원 중단(deprecated)되었으며 파이썬 3.16
    에서 제거될 예정입니다. 대신 *stream* 인자를 사용하여 처리기를 정
    의하는 방식으로 사용해주시기를 부탁드립니다. (Mariusz Felisiak가
    gh-115032를 통해 기능을 구현하였습니다.)

* "mimetypes":

  * "mimetypes.MimeTypes.add_type()"에서 유효한 확장자는 *.*으로 시작
    하거나 빈 문자열이어야 합니다. 점으로 시작하지 않는 확장자는 사용
    지원 중단(deprecated)되었으며, 파이썬 3.16에서는 "ValueError"를 발
    생시킵니다. (Hugo van Kemenade가 gh-75223를 통해 기능을 구현하였습
    니다.)

* "shutil":

  * "ExecError" 예외가 파이썬 3.14부터 사용 지원 중단(deprecated)되었
    습니다. 파이썬 3.4 이후로는 "shutil" 모듈의 어떤 함수에서도 사용되
    지 않았으며, 이제는 "RuntimeError"의 다른 이름(alias)으로 간주됩니
    다.

* "symtable":

  * "Class.get_methods" 메서드는 파이썬 3.14부터 사용 지원 중단
    (deprecated)되었습니다.

* "sys":

  * "_enablelegacywindowsfsencoding()" 함수는 파이썬 3.13부터 사용 지
    원 중단(deprecated)되었습니다. 대신
    "PYTHONLEGACYWINDOWSFSENCODING" 환경 변수를 사용해주시기를 부탁드
    립니다.

* "sysconfig":

  * "sysconfig.expand_makefile_vars()" 함수는 파이썬 3.14부터 사용 지
    원 중단(deprecated)되었습니다. 대신 "sysconfig.get_paths()" 의
    *vars* 인자를 사용해주시기를 부탁드립니다.

* "tarfile":

  * 문서화되지도 사용되지도 않고 있는 "TarFile.tarfile" 어트리뷰트는
    파이썬 3.13부터 사용 지원 중단(deprecated)되었습니다.


파이썬 3.17에서 제거 예정인 항목들
----------------------------------

* "datetime":

  * "strptime()" calls using a format string containing "%e" (day of
    month) without a year. This has been deprecated since Python 3.15.
    (Contributed by Stan Ulbrych in gh-70647.)

* "collections.abc":

  * "collections.abc.ByteString"은 파이썬 3.17에서 제거될 예정입니다.

    실행 시간에 특정 "obj"가 버퍼 프로토콜을 활용하는지 확인하려면
    "isinstance(obj, collections.abc.Buffer)"를 사용해주시기를 부탁드
    립니다. 타입 어노테이션(type annotation)에서 사용하시기를 원하는
    경우 "Buffer"를 사용하거나, 코드에서 지원하는 타입을 명시적으로 지
    정한 유니언(예를 들어, *bytes | bytearray | memoryview*)을 사용해
    주시기를 부탁드립니다.

    "ByteString"은 원래 "bytes"와 "bytearray" 두 경우 모두에 있어 상위
    타입으로 동작하는 추상 클래스로 설계되었습니다. 그러나 ABC에는 관
    련된 메서드가 전혀 없었기 때문에, 어떤 객체가 "ByteString" 인스턴
    스라는 사실을 알아도 그 객체에 대해 실제로 유용한 정보를 얻을 수
    없었습니다. "memoryview"와 같은 다른 보다 일반적인 버퍼 타입들도,
    런타임에서 혹은 정적 타입 검사기(type checker)에서 "ByteString"의
    하위 타입으로 취급된 적이 없습니다.

    보다 자세한 내용은 **PEP 688**을 참고해주시기를 부탁드립니다.
    (Shantanu Jain이 gh-91896를 통해 기능을 구현하였습니다.)

* "encodings":

  * Passing non-ascii *encoding* names to
    "encodings.normalize_encoding()" is deprecated and scheduled for
    removal in Python 3.17. (Contributed by Stan Ulbrych in
    gh-136702.)

* "profile":

  * The "profile" module is deprecated and will be removed in Python
    3.17. Use "profiling.tracing" instead, which provides a compatible
    API. See **PEP 799** for details. (Contributed by Pablo Galindo
    and László Kiss Kollár in gh-138122.)

* "webbrowser":

  * "webbrowser.MacOSXOSAScript" is deprecated in favour of
    "webbrowser.MacOS". (gh-137586)

* "typing":

  * 파이썬 3.14 이전에는 이전 스타일의 유니언(old-style union)이 비공
    개(private) 클래스 *typing._UnionGenericAlias*를 사용해 구현되었습
    니다. 해당하는 클래스는 더 이상 관련된 구체적인 구현에 필요하지는
    않지만 하위 호환성을 위해 유지되고 있습니다. 파이썬 3.17에서 제거
    될 예정입니다. 관련된 사용을 하실 경우, 문서화가 지원되는 관련 분
    석 도구들인 "typing.get_origin()"과 "typing.get_args()" 등을 보다
    적극적으로 활용해주시기를 부탁드립니다.

  * "typing.ByteString"는 파이썬 3.9부터 사용 지원 중단(deprecated)되
    었으며 파이썬 3.17에서 제거될 예정입니다.

    실행 시간에 특정 "obj"가 버퍼 프로토콜을 활용하는지 확인하려면
    "isinstance(obj, collections.abc.Buffer)"를 사용해주시기를 부탁드
    립니다. 타입 어노테이션(type annotation)에서 사용하시기를 원하는
    경우 "Buffer"를 사용하거나, 코드에서 지원하는 타입을 명시적으로 지
    정한 유니언(예를 들어, *bytes | bytearray | memoryview*)을 사용해
    주시기를 부탁드립니다.

    "ByteString"은 원래 "bytes"와 "bytearray" 두 경우 모두에 있어 상위
    타입으로 동작하는 추상 클래스로 설계되었습니다. 그러나 ABC에는 관
    련된 메서드가 전혀 없었기 때문에, 어떤 객체가 "ByteString" 인스턴
    스라는 사실을 알아도 그 객체에 대해 실제로 유용한 정보를 얻을 수
    없었습니다. "memoryview"와 같은 다른 보다 일반적인 버퍼 타입들도,
    런타임에서 혹은 정적 타입 검사기(type checker)에서 "ByteString"의
    하위 타입으로 취급된 적이 없습니다.

    보다 자세한 내용은 **PEP 688**을 참고해주시기를 부탁드립니다.
    (Shantanu Jain이 gh-91896를 통해 기능을 구현하였습니다.)

* "tkinter":

  * The "tkinter.Variable" methods "trace_variable()", "trace()" (an
    alias of "trace_variable()"), "trace_vdelete()" and
    "trace_vinfo()", deprecated since Python 3.14, are scheduled for
    removal in Python 3.17. Use "trace_add()", "trace_remove()" and
    "trace_info()" instead. (Contributed by Serhiy Storchaka in
    gh-120220.)


파이썬 3.18에서 제거 예정인 항목들
----------------------------------

* No longer accept a boolean value when a file descriptor is expected.
  (Contributed by Serhiy Storchaka in gh-82626.)

* "decimal":

  * The non-standard and undocumented "Decimal" format specifier
    "'N'", which is only supported in the "decimal" module's C
    implementation, has been deprecated since Python 3.13.
    (Contributed by Serhiy Storchaka in gh-89902.)

* Deprecations defined by **PEP 829**:

  * "import" lines in "*name*.pth" files are silently ignored.

  (Contributed by Barry Warsaw in gh-148641.)


파이썬 3.19에서 제거 예정인 항목들
----------------------------------

* "ctypes":

  * 윈도우가 아닌 플랫폼에서 "_pack_"는 설정하지만 "_layout_"는 설정하
    지 않아 MSVC 호환 구조체 레이아웃으로 묵시적으로 전환하는 동작.

* "hashlib":

  * In hash function constructors such as "new()" or the direct hash-
    named constructors such as "md5()" and "sha256()", their optional
    initial data parameter could also be passed a keyword argument
    named "data=" or "string=" in various "hashlib" implementations.

    Support for the "string" keyword argument name is now deprecated
    and slated for removal in Python 3.19.

    Before Python 3.13, the "string" keyword parameter was not
    correctly supported depending on the backend implementation of
    hash functions. Prefer passing the initial data as a positional
    argument for maximum backwards compatibility.

* "http.cookies":

  * "http.cookies.Morsel.js_output()" is deprecated and will be
    removed in Python 3.19.

  * "http.cookies.BaseCookie.js_output()" is deprecated and will be
    removed in Python 3.19.

* "imaplib":

  * Altering "IMAP4.file" is now deprecated and slated for removal in
    Python 3.19. This property is now unused and changing its value
    does not automatically close the current file.

    Before Python 3.14, this property was used to implement the
    corresponding "read()" and "readline()" methods for "IMAP4" but
    this is no longer the case since then.


Pending removal in Python 3.20
------------------------------

* Calling the "__new__()" method of "struct.Struct" without the
  *format* argument is deprecated and will be removed in Python 3.20.
  Calling "__init__()" method on initialized "Struct" objects is
  deprecated and will be removed in Python 3.20.

  (Contributed by Sergey B Kirpichev and Serhiy Storchaka in
  gh-143715.)

* The "__version__", "version" and "VERSION" attributes have been
  deprecated in these standard library modules and will be removed in
  Python 3.20. Use "sys.version_info" instead.

  * "argparse"

  * "csv"

  * "ctypes"

  * "ctypes.macholib"

  * "decimal" (use "decimal.SPEC_VERSION" instead)

  * "http.server"

  * "imaplib"

  * "ipaddress"

  * "json"

  * "logging" ("__date__" also deprecated)

  * "optparse"

  * "pickle"

  * "platform"

  * "re"

  * "socketserver"

  * "tabnanny"

  * "tarfile"

  * "tkinter.font"

  * "tkinter.ttk"

  * "wsgiref.simple_server"

  * "xml.etree.ElementTree"

  * "xml.sax.expatreader"

  * "xml.sax.handler"

  * "zlib"

  (Contributed by Hugo van Kemenade and Stan Ulbrych in gh-76007.)

* Deprecations defined by **PEP 829**:

  * Warnings are produced for "import" lines found in "*name*.pth"
    files.

  * "*name*.pth" files are no longer decoded in the locale encoding by
    default.  They **MUST** be encoded in "utf-8-sig".

  (Contributed by Barry Warsaw in gh-148641.)

* "ast":

  * Creating instances of abstract AST nodes (such as "ast.AST" or
    "ast.expr") is deprecated and will raise an error in Python 3.20.

* "typing":

  * It is deprecated to call "isinstance()" and "issubclass()" checks
    on protocol classes that were not explicitly decorated with
    "runtime_checkable()" but that inherit from a runtime-checkable
    protocol class. This will raise a "TypeError" in Python 3.20.

    (Contributed by Bartosz Sławecki in gh-132604.)


향후 보다 상위 버전의 제거 예정 항목들
--------------------------------------

다음의 API들은 향후 버전에서 제거될 예정이지만, 구체적인 제거 시점이
아직 정해지지는 않았습니다.

* "argparse":

  * 인자 그룹과 상호 배타적 인자 그룹을 중첩해서 사용하는 기능은 사용
    지원 중단(deprecated)되었습니다.

  * 문서화되지 않은 키워드 인자 *prefix_chars*를
    "add_argument_group()"에 전달하는 방식의 사용이 사용 지원 중단
    (deprecated)되었습니다.

  * "argparse.FileType" 타입 변환기(type converter)가 사용 지원 중단
    (deprecated)되었습니다.

* "builtins":

  * 제너레이터에서 *throw(type, exc, tb)* 및 *athrow(type, exc, tb)*
    시그니처는 사용 지원 중단(deprecated)되었습니다. 대신 단일 인자 시
    그니처인 *throw(exc)*와 *athrow(exc)*를 사용해주시기를 부탁드립니
    다.

  * 현재 파이썬은 숫자 리터럴 바로 뒤에 키워드가 오는 방식의 표현을 허
    용합니다. 예를 들어, "0in x", "1or x", "0if 1else 2"와 같은 표현이
    허용됩니다. 이로 인해, *[0x1for x in y]*처럼 혼란스럽거나 모호한
    종류의 표현도 허용됩니다. 해당하는 예시의 표현은 "[0x1 for x in
    y]" 또는 "[0x1f or x in y]"로 해석될 수 있습니다. 숫자 리터럴 바로
    뒤에 "and", "else", "for", "if", "in", "is", "or" 중 하나의 키워드
    가 오는 경우 구문 경고가 발생합니다. 향후 릴리스에서는 이것이 문법
    에러로 간주될 예정입니다. (보다 자세한 내용의 경우 gh-87999를 참고
    부탁드립니다.)

  * "__index__()" 및 "__int__()" 메서드가 정수가 아닌 타입을 반환하는
    방식의 사용은 사용 지원 중단(deprecated)되었습니다. 대신 해당하는
    메서드는 "int"의 실제 하위 클래스(strict subclass) 인스턴스를 반환
    하는 방식으로 사용해주시기를 부탁드립니다.

  * "__float__()" 메서드가 "float"의 실제 하위 클래스(strict subclass)
    를 반환하는 방식의 사용은 사용 지원 중단(deprecated)되었습니다. 이
    제 해당하는 메서드는 "float" 인스턴스를 반환하는 방식으로 사용해주
    시기를 부탁드립니다.

  * *__complex__()* 메서드가 "complex"의 실제 하위 클래스(strict
    subclass)를 반환하는 방식의 사용은 사용 지원 중단(deprecated)되었
    습니다. 이제 해당하는 메서드는 "complex" 인스턴스를 반환하는 방식
    으로 사용해주시기를 부탁드립니다.

  * 복소수를 "complex()" 생성자의 *real* 또는 *imag* 인자로 전달하는
    것은 이제 사용 지원이 중단(deprecated)되었으며, 복소수는 하나의 위
    치 인자로만 전달해주시기를 부탁드립니다. (Serhiy Storchaka가
    gh-109218를 통해 기능을 구현하였습니다.)

* "calendar": *calendar.January*와 *calendar.February* 상수는 사용 지
  원이 중단(deprecated)되었으며, 대신 "calendar.JANUARY" 와
  "calendar.FEBRUARY" 를 사용해주시기를 부탁드립니다. (Prince Roshan이
  gh-103636를 통해 기능을 구현하였습니다.)

* "codecs": "codecs.open()" 대신 "open()"을 사용하십시오. (보다 자세한
  내용의 경우 gh-133038를 참고 부탁드립니다.)

* "codeobject.co_lnotab": use the "codeobject.co_lines()" method
  instead.

* "datetime":

  * "utcnow()": 대신 "datetime.datetime.now(tz=datetime.UTC)" 메서드를
    사용해주시기를 부탁드립니다.

  * "utcfromtimestamp()": use
    "datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)".

* "gettext": 복수형 값(plural value)은 정수여야 합니다.

* "importlib":

  * "cache_from_source()" 의 *debug_override* 매개 변수는 사용 지원 중
    단(deprecated)되었습니다. 대신 *optimization* 매개 변수를 사용해주
    시기를 부탁드립니다.

* "importlib.metadata":

  * "EntryPoints" 튜플 인터페이스.

  * 반환 값의 암시적 "None".

* "logging": "warn()" 메서드는 파이썬 3.3부터 사용 지원 중단
  (deprecated) 되었습니다. 대신 "warning()"을 사용해주시기를 부탁드립
  니다.

* "mailbox": StringIO 입력과 텍스트 모드 사용은 사용 지원 중단
  (deprecated) 되었습니다. 대신 *BytesIO* 와 바이너리 모드를 사용해주
  시기를 부탁드립니다.

* "os": Calling "os.register_at_fork()" in a multi-threaded process.

* "os.path": "os.path.commonprefix()" is deprecated, use
  "os.path.commonpath()" for path prefixes. The
  "os.path.commonprefix()" function is being deprecated due to having
  a misleading name and module. The function is not safe to use for
  path prefixes despite being included in a module about path
  manipulation, meaning it is easy to accidentally introduce path
  traversal vulnerabilities into Python programs by using this
  function.

* "pydoc.ErrorDuringImport": *exc_info* 매개 변수에 튜플 값을 사용하는
  것은 사용 지원 중단(deprecated) 되었습니다. 대신 예외 인스턴스를 사
  용해주시기를 부탁드립니다.

* "re": 정규식의 숫자 그룹 참조와 그룹 이름에 보다 더 엄격한 규칙이 적
  용됩니다. 숫자 참조에는 ASCII 숫자 시퀀스만 허용됩니다. 바이트 패턴
  과 치환 문자열에서 사용되는 그룹 이름에는 이제 ASCII 영문자, 숫자,
  밑줄(*_*)만 포함될 수 있습니다. (Serhiy Storchaka가 gh-91760를 통해
  기능을 구현하였습니다.)

* "shutil": "rmtree()"의 *onerror* 매개변수는 파이썬 3.12에서 사용 지
  원이 중단(deprecated)되었습니다. 대신 *onexc* 매개변수를 사용해주시
  기를 부탁드립니다.

* "ssl" 옵션 및 프로토콜:

  * "ssl.SSLContext" 생성 시 프로토콜 인자를 지정하지 않는 방식은 사용
    지원이 중단(deprecated)되었습니다.

  * "ssl.SSLContext": "set_npn_protocols()" 그리고
    "selected_npn_protocol()"은 사용 지원이 중단(deprecated)되었습니다
    . 대신 ALPN을 사용해주시기를 부탁드립니다.

  * "ssl.OP_NO_SSL*" options

  * "ssl.OP_NO_TLS*" options

  * "ssl.PROTOCOL_SSLv3"

  * "ssl.PROTOCOL_TLS"

  * "ssl.PROTOCOL_TLSv1"

  * "ssl.PROTOCOL_TLSv1_1"

  * "ssl.PROTOCOL_TLSv1_2"

  * "ssl.TLSVersion.SSLv3"

  * "ssl.TLSVersion.TLSv1"

  * "ssl.TLSVersion.TLSv1_1"

* "threading" 메서드:

  * "threading.Condition.notifyAll()": 대신 "notify_all()"를 사용해주
    시기를 부탁드립니다.

  * "threading.Event.isSet()": 대신 "is_set()"를 사용해주시기를 부탁드
    립니다.

  * "threading.Thread.isDaemon()"와 "threading.Thread.setDaemon()": 대
    신 "threading.Thread.daemon" 어트리뷰트를 사용해주시기를 부탁드립
    니다.

  * "threading.Thread.getName()"와 "threading.Thread.setName()": 대신
    "threading.Thread.name" 어트리뷰트를 사용해주시기를 부탁드립니다.

  * "threading.currentThread()": 대신 "threading.current_thread()"를
    사용해주시기를 부탁드립니다.

  * "threading.activeCount()": 대신 "threading.active_count()"를 사용
    해주시기를 부탁드립니다.

* "typing.Text" (gh-92332).

* 내부 클래스 *typing._UnionGenericAlias*는 "typing.Union" 구현에 있어
  더 이상 사용되지 않습니다. 해당하는 비공개(private) 클래스를 사용하
  는 코드들과의 호환성을 유지하기 위해, 호환성을 위한 도구(shim)이 최
  소한 파이썬 3.17까지는 제공될 예정입니다. (Jelle Zijlstra가
  gh-105499를 통해 기능을 구현하였습니다.)

* "unittest.IsolatedAsyncioTestCase": 테스트 케이스에서 "None"이 아닌
  값을 반환하는 방식의 사용은 사용 지원 중단(deprecated)되었습니다.

* "urllib.parse"의 사용 지원 중단된 함수들: 대신 "urlparse()"를 사용해
  주시기를 부탁드립니다.

  * "splitattr()"

  * "splithost()"

  * "splitnport()"

  * "splitpasswd()"

  * "splitport()"

  * "splitquery()"

  * "splittag()"

  * "splittype()"

  * "splituser()"

  * "splitvalue()"

  * "to_bytes()"

* "wsgiref": *SimpleHandler.stdout.write()*는 부분 쓰기(partial write)
  를 수행하지 않아야 함을 유의해주십사 부탁드립니다.

* "xml.etree.ElementTree": "Element"의 진리값(truth value)을 검사하는
  것은 더 이상 권장되지 않으며(Deprecated) 폐지 예정입니다. 향후 파이
  썬 버전에서는 모든 경우에 있어 "True"를 반환할 것입니다. 명시적인
  "len(elem)" 또는 "elem is not None" 방식의 테스트를 대신 사용해주시
  기를 부탁드립니다.

* "sys._clear_type_cache()" 함수는 사용 지원 중단(deprecated)되었습니
  다. 대신 "sys._clear_internal_caches()"를 사용해주시기를 부탁드립니
  다.


CPython 바이트 코드 변경 사항
=============================

* "BINARY_SUBSCR" 명령어가 *NB_SUBSCR* oparg를 사용하는 "BINARY_OP" 명
  령어로 대체되었습니다. (Irit Katriel이 gh-100239를 통해 기능을 구현
  하였습니다.)

* 새로운 "Interpolation" 및 "Template" 인스턴스를 각각 생성하기 위해
  "BUILD_INTERPOLATION" 및 "BUILD_TEMPLATE" 명령어를 추가하였습니다.
  (Lysandros Nikolaou와 다른 기여자들이 gh-132661를 통해 기능을 구현하
  였습니다. PEP 750: 템플릿 문자열도 참조해주시기를 부탁드립니다.)

* "BUILD_CONST_KEY_MAP" 명령어를 제거하였습니다. 대신 "BUILD_MAP"를 사
  용해주시기를 부탁드립니다. (Mark Shannon이 gh-122160를 통해 기능을
  구현하였습니다.)

* "LOAD_ASSERTION_ERROR" 명령어를 "LOAD_COMMON_CONSTANT" 명령어로 대체
  하고, "NotImplementedError"를 로드할 수 있도록 지원을 추가하였습니다
  .

* 인터프리터가 프레임의 참조가 스택에 로드된 참조보다 수명이 더 길다는
  것을 증명할 수 있을 때 참조 횟수 추적 오버헤드를 줄이기 위해
  "LOAD_FAST_BORROW" 및 "LOAD_FAST_BORROW_LOAD_FAST_BORROW" 명령어를
  추가하였습니다. (Matt Page가 gh-130704를 통해 기능을 구현하였습니다
  .)

* "LOAD_SMALL_INT" 명령어를 추가하였습니다. 해당하는 명령어는 *oparg*
  와 같은 작은 정수를 스택에 푸시합니다. "RETURN_CONST" 명령어는 더 이
  상 사용되지 않으므로 제거되었습니다. (Mark Shannon이 gh-125837를 통
  해 기능을 구현하였습니다.)

* 새로운 "LOAD_SPECIAL" 명령어를 추가하였습니다. 새로운 명령어를 사용
  하여 "with" 및 "async with" 문장의 코드를 생성합니다. "BEFORE_WITH"
  및 "BEFORE_ASYNC_WITH" 명령어는 제거되었습니다. (Mark Shannon이
  gh-120507를 통해 기능을 구현하였습니다.)

* 가상 이터레이터를 지원하기 위해 "POP_ITER" 명령어를 추가하였습니다.
  (Mark Shannon이 gh-132554를 통해 기능을 구현하였습니다.)


의사 명령어
-----------

* 어노테이션의 지연 평가에서 부분적으로 실행되는 모듈 수준 어노테이션
  을 지원하기 위해 "ANNOTATIONS_PLACEHOLDER" 의사 명령어를 추가하였습
  니다. (Jelle Zijlstra가 gh-130907를 통해 기능을 구현하였습니다.)

* 인라인 캐시에서 액세스되는 함수 쌍(가드 함수와 특수화 함수)을 실행하
  는 "BINARY_OP_EXTEND" 의사 명령어를 추가하였습니다. (Irit Katriel이
  gh-100239를 통해 기능을 구현하였습니다.)

* "CALL_KW"에 대한 세 가지 특수화를 추가하였습니다. "CALL_KW_PY"는 파
  이썬 함수 호출에, "CALL_KW_BOUND_METHOD"는 바인딩된 메서드 호출에,
  "CALL_KW_NON_PY"는 그 외 모든 호출에 사용됩니다. (Mark Shannon이
  gh-118093를 통해 기능을 구현하였습니다.)

* "JUMP_IF_TRUE" 및 "JUMP_IF_FALSE" 의사 명령어를 추가하였습니다. 이들
  은 스택에 영향을 주지 않는 조건부 점프입니다. *COPY 1*, *TO_BOOL*,
  *POP_JUMP_IF_TRUE/FALSE* 시퀀스로 대체됩니다. (Irit Katriel이
  gh-124285를 통해 기능을 구현하였습니다.)

* "LOAD_CONST_MORTAL" 의사 명령어를 추가하였습니다. (Mark Shannon이
  gh-128685를 통해 기능을 구현하였습니다.)

* Add the "LOAD_CONST_IMMORTAL" pseudo instruction, which does the
  same as "LOAD_CONST", but is more efficient for immortal objects.
  (Contributed by Mark Shannon in gh-125837.)

* "NOT_TAKEN" 의사 명령어를 추가하였습니다. 해당하는 명령어는
  "sys.monitoring"에서 분기 이벤트(예를 들어, "BRANCH_LEFT")를 기록하
  는 데 사용됩니다. (Mark Shannon이 gh-122548를 통해 기능을 구현하였습
  니다.)


C API의 변경 사항들
===================


파이썬 구성 C API
-----------------

C 구조체에 의존하지 않고 파이썬 초기화를 구성할 수 있으며 향후 ABI 호
환 변경이 가능하도록 PyInitConfig C API를 추가하였습니다.

내장 확장 모듈을 추가하는 데 사용할 수 있는 "PyInitConfig_AddModule()"
을 추가하여 **PEP 587** PyConfig C API를 완성하였습니다. 해당하는 기능
은 이전에 "inittab"이라고 불렸습니다.

"PyConfig_Get()" 및 "PyConfig_Set()" 함수를 추가하여 현재 런타임 구성
을 가져오고 설정할 수 있게 하였습니다.

**PEP 587** '파이썬 초기화 구성'은 파이썬 초기화를 구성하는 모든 방식
을 통합하였습니다. 해당하는 PEP는 파이썬의 사전 초기화 구성과 초기화
구성을 하나의 API로 통합합니다. 또한 해당하는 PEP는 API를 더 단순화하
기 위해, 두 가지 'Python' 및 'Isolated' 선택지(PEP 587) 대신 파이썬을
내장하기 위한 단일 선택지만 제공합니다.

더 저수준인 PEP 587 PyConfig API는 CPython 구현 세부 사항에 의도적으로
더 높은 수준으로 결합되어야 하는 사용 사례(예를 들어, 구성 메커니즘을
포함한 CPython CLI의 전체 기능을 에뮬레이트하는 경우)를 위해 계속 사용
할 수 있습니다.

(Victor Stinner가 gh-107954를 통해 기능을 구현하였습니다.)

더 보기: **PEP 741** 및 **PEP 587**


C API의 새로운 기능들
---------------------

* 파이썬 버전 번호를 비트 패킹(bit-packing)하기 위한 두 개의 새 매크로
  인 "Py_PACK_VERSION()" 및 "Py_PACK_FULL_VERSION()"을 추가하였습니다.
  이는 "Py_Version" 혹은 "PY_VERSION_HEX"와 비교할 때 유용합니다.
  (Petr Viktorin이 gh-128629를 통해 기능을 구현하였습니다.)

* 파이썬의 *sep.join(iterable)*와 유사한 "PyBytes_Join(sep, iterable)"
  함수를 추가하였습니다. (Victor Stinner가 gh-121645를 통해 기능을 구
  현하였습니다.)

* 현재 런타임 파이썬 인터프리터의 구성을 조작하는 함수들을 추가하였습
  니다(PEP 741: 파이썬 구성 C API):

  * "PyConfig_Get()"

  * "PyConfig_GetInt()"

  * "PyConfig_Set()"

  * "PyConfig_Names()"

  (Victor Stinner가 gh-107954를 통해 기능을 구현하였습니다.)

* 파이썬 초기화를 구성하는 함수들을 추가하였습니다(PEP 741: 파이썬 구
  성 C API):

  * "Py_InitializeFromInitConfig()"

  * "PyInitConfig_AddModule()"

  * "PyInitConfig_Create()"

  * "PyInitConfig_Free()"

  * "PyInitConfig_FreeStrList()"

  * "PyInitConfig_GetError()"

  * "PyInitConfig_GetExitCode()"

  * "PyInitConfig_GetInt()"

  * "PyInitConfig_GetStr()"

  * "PyInitConfig_GetStrList()"

  * "PyInitConfig_HasOption()"

  * "PyInitConfig_SetInt()"

  * "PyInitConfig_SetStr()"

  * "PyInitConfig_SetStrList()"

  (Victor Stinner가 gh-107954를 통해 기능을 구현하였습니다.)

* "Py_fopen()" 함수를 추가하였습니다. 해당하는 함수는 표준 C "fopen()"
  함수와 유사하게 동작하지만, *path* 매개변수로 파이썬 객체를 받고 에
  러가 발생하면 예외를 설정합니다. 파일을 닫을 때는 이에 대응하는 새
  "Py_fclose()" 함수를 사용해야 합니다. (Victor Stinner가 gh-127350를
  통해 기능을 구현하였습니다.)

* 버퍼의 해시값을 계산하여 반환하는 "Py_HashBuffer()"를 추가하였습니다
  . (Antoine Pitrou와 Victor Stinner가 gh-122854를 통해 기능을 구현하
  였습니다.)

* 모듈을 임포트(import)하고 해당 모듈의 어트리뷰트를 가져오기 위한
  "PyImport_ImportModuleAttr()" 및 "PyImport_ImportModuleAttrString()"
  보조 함수를 추가하였습니다. (Victor Stinner가 gh-128911를 통해 기능
  을 구현하였습니다.)

* "PyIter_NextItem()" 함수를 추가하였습니다. 해당하는 함수는 반환값이
  모호한 "PyIter_Next()"를 대체합니다. (Irit Katriel과 Erlend Aasland
  가 gh-105201를 통해 기능을 구현하였습니다.)

* "int" 객체의 부호를 얻기 위한 "PyLong_GetSign()" 함수를 추가하였습니
  다. (Sergey B Kirpichev가 gh-116560를 통해 기능을 구현하였습니다.)

* "PyLongObject"가 양수인지, 음수인지, 혹은 0인지 각각 확인하기 위한
  "PyLong_IsPositive()", "PyLong_IsNegative()", 그리고
  "PyLong_IsZero()" 함수를 추가하였습니다. (James Roy와 Sergey B
  Kirpichev가 gh-126061를 통해 기능을 구현하였습니다.)

* C *<stdint.h>* 숫자를 파이썬 "int" 객체로, 혹은 그 반대로 변환하는
  새로운 함수들을 추가하였습니다:

  * "PyLong_AsInt32()"

  * "PyLong_AsInt64()"

  * "PyLong_AsUInt32()"

  * "PyLong_AsUInt64()"

  * "PyLong_FromInt32()"

  * "PyLong_FromInt64()"

  * "PyLong_FromUInt32()"

  * "PyLong_FromUInt64()"

  (Victor Stinner가 gh-120389를 통해 기능을 구현하였습니다.)

* 파이썬 "int" 객체를 위한 새로운 임포트(import)와 익스포트 API를 추가
  하였습니다(**PEP 757**):

  * "PyLong_GetNativeLayout()"

  * "PyLong_Export()"

  * "PyLong_FreeExport()"

  * "PyLongWriter_Create()"

  * "PyLongWriter_Finish()"

  * "PyLongWriter_Discard()"

  (Sergey B Kirpichev와 Victor Stinner가 gh-102471를 통해 기능을 구현
  하였습니다.)

* "PyMonitoring_FireBranchLeftEvent()" 및
  "PyMonitoring_FireBranchRightEvent()" 함수를 추가하였습니다. 해당 함
  수들은 각각 "BRANCH_LEFT" 및 "BRANCH_RIGHT" 이벤트를 생성합니다.
  (Mark Shannon이 gh-122548를 통해 기능을 구현하였습니다.)

* 형을 불변으로 만들기 위한 "PyType_Freeze()" 함수를 추가하였습니다.
  (Victor Stinner가 gh-121654를 통해 기능을 구현하였습니다.)

* 슈퍼 클래스를 더 쉽게 식별하기 위한 "PyType_GetBaseByToken()" 및
  "Py_tp_token" 슬롯을 추가하였습니다. 이는 **PEP 630**에서 언급된 형
  검사 문제를 해결하고자 하는 시도입니다. (gh-124153를 통해 기능이 구
  현되었습니다.)

* 두 문자열이 같은지 검사하기 위한 새로운 "PyUnicode_Equal()" 함수를
  추가하였습니다. 해당하는 함수는 제한된 C API에도 추가되었습니다.
  (Victor Stinner가 gh-124502를 통해 기능을 구현하였습니다.)

* 다음 함수들을 포함하는, 파이썬 "str" 객체 생성을 위한 새로운
  "PyUnicodeWriter" API를 추가하였습니다:

  * "PyUnicodeWriter_Create()"

  * "PyUnicodeWriter_DecodeUTF8Stateful()"

  * "PyUnicodeWriter_Discard()"

  * "PyUnicodeWriter_Finish()"

  * "PyUnicodeWriter_Format()"

  * "PyUnicodeWriter_WriteASCII()"

  * "PyUnicodeWriter_WriteChar()"

  * "PyUnicodeWriter_WriteRepr()"

  * "PyUnicodeWriter_WriteStr()"

  * "PyUnicodeWriter_WriteSubstring()"

  * "PyUnicodeWriter_WriteUCS4()"

  * "PyUnicodeWriter_WriteUTF8()"

  * "PyUnicodeWriter_WriteWideChar()"

  (Victor Stinner가 gh-119182를 통해 기능을 구현하였습니다.)

* "PyArg_ParseTuple()" 및 유사한 함수의 *k* 및 *K* 포맷은 이제 다른 모
  든 정수 포맷과 마찬가지로, 사용 가능한 경우 "__index__()"를 사용합니
  다. (Serhiy Storchaka가 gh-112068를 통해 기능을 구현하였습니다.)

* C 정수에서 파이썬 "bool" 객체를 생성하는 "Py_BuildValue()"의 새로운
  *p* 포맷 단위에 대한 지원을 추가하였습니다. (Pablo Galindo가
  bpo-45325를 통해 기능을 구현하였습니다.)

* 디버깅을 목적으로 객체가 *불멸*인지 확인하기 위한
  "PyUnstable_IsImmortal()"을 추가하였습니다. (Peter Bierma가
  gh-128509를 통해 기능을 구현하였습니다.)

* **PEP 703**에 설명된 대로 지연된 참조 횟수 추적을 활성화하기 위한
  "PyUnstable_Object_EnableDeferredRefcount()"를 추가하였습니다.

* *자유 스레딩* 빌드에서 *Py_REFCNT(op) == 1*을 대체하기 위한
  "PyUnstable_Object_IsUniquelyReferenced()"를 추가하였습니다. (Peter
  Bierma가 gh-133140를 통해 기능을 구현하였습니다.)

* "PyUnstable_Object_IsUniqueReferencedTemporary()"를 추가하였습니다.
  해당하는 함수는 인터프리터의 피연산자 스택에 있는 객체가 유일한 임시
  객체인지 확인하는 데 사용됩니다. 이는 C API 함수에 인자로 전달된 파
  이썬 객체에 대해 "Py_REFCNT()"가 *1*인지 확인하는 작업을 일부 경우에
  대체하는 데 사용할 수 있습니다. (Sam Gross가 gh-133164를 통해 기능을
  구현하였습니다.)


제한된 C API의 변경 사항들
--------------------------

* 제한된 C API 버전 3.14 이상에서 "Py_TYPE()" 및 "Py_REFCNT()"는 이제
  구현 세부 사항을 숨기기 위해 불투명한 함수 호출로 구현됩니다.
  (Victor Stinner가 gh-120600 및 gh-124127를 통해 기능을 구현하였습니
  다.)

* 제한된 C API에서 항상 제대로 동작하지 않았기 때문에, 제한된 C API에
  서 "PySequence_Fast_GET_SIZE", "PySequence_Fast_GET_ITEM", 그리고
  "PySequence_Fast_ITEMS" 매크로를 제거하였습니다. (Victor Stinner가
  gh-91417를 통해 기능을 구현하였습니다.)


제거된 C API들
--------------

* 가변 베이스를 사용하여 "불변 형"을 만드는 것은 파이썬 3.12에서 폐지
  되었으며, 이제 "TypeError"를 발생시킵니다. (Nikita Sobolev가
  gh-119775를 통해 기능을 구현하였습니다.)

* 파이썬 3.12에서 폐지되었던 *PyDictObject.ma_version_tag* 멤버를 제거
  하였습니다. 대신 "PyDict_AddWatcher()" API를 사용해주시기를 부탁드립
  니다. (Sam Gross가 gh-124296를 통해 기능을 구현하였습니다.)

* 비공개 *_Py_InitializeMain()* 함수를 제거하였습니다. 해당하는 함수는
  **PEP 587**을 통해 파이썬 3.8에 추가된 *잠정 API*였습니다. (Victor
  Stinner가 gh-129033를 통해 기능을 구현하였습니다.)

* 문서화되지 않은 API인 "Py_C_RECURSION_LIMIT"와
  "PyThreadState.c_recursion_remaining"을 제거하였습니다. 이들은 3.13
  에 추가되었으며, 폐지 절차 없이 제거되었습니다. C 코드에서 과도한 재
  귀 현상을 방지하려면 "Py_EnterRecursiveCall()"을 사용해주시기를 부탁
  드립니다. (Petr Viktorin이 gh-133079를 통해 제거하였습니다. 또한
  gh-130396도 참조해주시기를 부탁드립니다.)


사용 지원 중단(deprecated)된 C API들
------------------------------------

* The "Py_HUGE_VAL" macro is now *soft deprecated*. Use "INFINITY"
  instead. (Contributed by Sergey B Kirpichev in gh-120026.)

* "Py_IS_NAN", "Py_IS_INFINITY", 그리고 "Py_IS_FINITE" 매크로는 이제 *
  약하게 폐지된* 상태입니다. 대신 C99부터 "math.h"에서 제공되는
  "isnan", "isinf", 그리고 "isfinite"를 사용해주시기를 부탁드립니다.
  (Sergey B Kirpichev가 gh-119613를 통해 기능을 구현하였습니다.)

* *items*가 빌린 버퍼 혹은 *빌린 참조*를 저장하는 포맷 단위를 포함하는
  경우, 튜플이 아닌 시퀀스를 "PyArg_ParseTuple()" 및 기타 인자 파싱 함
  수에서 *(items)* 포맷 단위의 인자로 사용하는 것이 이제 폐지되었습니
  다. (Serhiy Storchaka가 gh-50333를 통해 기능을 구현하였습니다.)

* *_PyMonitoring_FireBranchEvent* 함수는 이제 폐지되었으며,
  "PyMonitoring_FireBranchLeftEvent()" 및
  "PyMonitoring_FireBranchRightEvent()" 호출로 대체되어야 합니다.

* 이전에 문서화되지 않았던 "PySequence_In()" 함수는 이제 *약하게 폐지
  된* 상태입니다. 대신 "PySequence_Contains()"를 사용해주시기를 부탁드
  립니다. (Yuki Kobayashi가 gh-127896를 통해 기능을 구현하였습니다.)


파이썬 3.15에서 제거 예정인 항목들
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* The "PyImport_ImportModuleNoBlock()": Use "PyImport_ImportModule()"
  instead.

* "PyWeakref_GetObject()" and "PyWeakref_GET_OBJECT()": Use
  "PyWeakref_GetRef()" instead. The pythoncapi-compat project can be
  used to get "PyWeakref_GetRef()" on Python 3.12 and older.

* "PyUnicode_AsDecodedObject()": 대신 "PyCodec_Decode()"를 사용해주시
  기를 부탁드립니다.

* "PyUnicode_AsDecodedUnicode()": 대신 "PyCodec_Decode()"를 사용해주시
  기를 부탁드립니다. 다만, 일부 코덱(예를 들어, "base64")은 "str"이 아
  닌 "bytes"와 같은 다른 타입을 반환할 수 있음을 주의해주시기를 부탁드
  립니다.

* "PyUnicode_AsEncodedObject()": 대신 "PyCodec_Encode()"를 사용해주시
  기를 부탁드립니다.

* "PyUnicode_AsEncodedUnicode()" 대신 "PyCodec_Encode()"를 사용해주시
  기를 부탁드립니다. 일부 코덱(예를 들어, "base64")은 "bytes"가 아닌
  "str"과 같은 다른 타입을 반환할 수 있음을 주의해주시기를 부탁드립니
  다.

* 파이썬 3.13에서 사용 지원 중단(deprecated)된 파이썬 초기화 함수들:

  * "Py_GetPath()": Use "PyConfig_Get("module_search_paths")"
    ("sys.path") instead.

  * "Py_GetPrefix()": Use "PyConfig_Get("base_prefix")"
    ("sys.base_prefix") instead. Use "PyConfig_Get("prefix")"
    ("sys.prefix") if virtual environments need to be handled.

  * "Py_GetExecPrefix()": Use "PyConfig_Get("base_exec_prefix")"
    ("sys.base_exec_prefix") instead. Use
    "PyConfig_Get("exec_prefix")" ("sys.exec_prefix") if virtual
    environments need to be handled.

  * "Py_GetProgramFullPath()": Use "PyConfig_Get("executable")"
    ("sys.executable") instead.

  * "Py_GetProgramName()": Use "PyConfig_Get("executable")"
    ("sys.executable") instead.

  * "Py_GetPythonHome()": Use "PyConfig_Get("home")" or the
    "PYTHONHOME" environment variable instead.

  Python 3.13 및 이전 버전에서 "PyConfig_Get()"을 사용하기 위해
  pythoncapi-compat 프로젝트를 사용할 수 있습니다.

* 파이썬 3.11에서 사용 지원이 중단(deprecated)된, 파이썬 초기화를 구성
  하는 함수들은 다음과 같습니다:

  * "PySys_SetArgvEx()": 대신 "PyConfig.argv"를 설정해주시기를 부탁드
    립니다.

  * "PySys_SetArgv()": 대신 "PyConfig.argv"를 설정해주시기를 부탁드립
    니다.

  * "Py_SetProgramName()": 대신 "PyConfig.program_name"를 설정해주시기
    를 부탁드립니다.

  * "Py_SetPythonHome()": 대신 "PyConfig.home"를 설정해주시기를 부탁드
    립니다.

  * "PySys_ResetWarnOptions()": Clear "sys.warnoptions" and
    "warnings.filters" instead.

  "Py_InitializeFromConfig()" API는 "PyConfig"와 함께 사용되어야 합니
  다.

* 전역 구성 변수들:

  * "Py_DebugFlag": 대신 "PyConfig.parser_debug"나
    "PyConfig_Get("parser_debug")"를 사용해주시기를 부탁드립니다.

  * "Py_VerboseFlag": 대신 "PyConfig.verbose"나
    "PyConfig_Get("verbose")"를 사용해주시기를 부탁드립니다.

  * "Py_QuietFlag": 대신 "PyConfig.quiet"나 "PyConfig_Get("quiet")"를
    사용해주시기를 부탁드립니다.

  * "Py_InteractiveFlag": 대신 "PyConfig.interactive"나
    "PyConfig_Get("interactive")"를 사용해주시기를 부탁드립니다.

  * "Py_InspectFlag": 대신 "PyConfig.inspect"나
    "PyConfig_Get("inspect")"를 사용해주시기를 부탁드립니다.

  * "Py_OptimizeFlag": 대신 "PyConfig.optimization_level"나
    "PyConfig_Get("optimization_level")"를 사용해주시기를 부탁드립니다
    .

  * "Py_NoSiteFlag": 대신 "PyConfig.site_import"나
    "PyConfig_Get("site_import")"를 사용해주시기를 부탁드립니다.

  * "Py_BytesWarningFlag": 대신 "PyConfig.bytes_warning"나
    "PyConfig_Get("bytes_warning")"를 사용해주시기를 부탁드립니다.

  * "Py_FrozenFlag": 대신 "PyConfig.pathconfig_warnings"나
    "PyConfig_Get("pathconfig_warnings")"를 사용해주시기를 부탁드립니
    다.

  * "Py_IgnoreEnvironmentFlag": 대신 "PyConfig.use_environment"나
    "PyConfig_Get("use_environment")"를 사용해주시기를 부탁드립니다.

  * "Py_DontWriteBytecodeFlag": 대신 "PyConfig.write_bytecode"나
    "PyConfig_Get("write_bytecode")"를 사용해주시기를 부탁드립니다.

  * "Py_NoUserSiteDirectory": 대신 "PyConfig.user_site_directory"나
    "PyConfig_Get("user_site_directory")"를 사용해주시기를 부탁드립니
    다.

  * "Py_UnbufferedStdioFlag": 대신 "PyConfig.buffered_stdio"나
    "PyConfig_Get("buffered_stdio")"를 사용해주시기를 부탁드립니다.

  * "Py_HashRandomizationFlag": 대신 "PyConfig.use_hash_seed"나
    "PyConfig.hash_seed" 혹은 "PyConfig_Get("hash_seed")"를 사용해주시
    기를 부탁드립니다.

  * "Py_IsolatedFlag": 대신 "PyConfig.isolated" 혹은
    "PyConfig_Get("isolated")"를 사용해주시기를 부탁드립니다.

  * "Py_LegacyWindowsFSEncodingFlag": 대신
    "PyPreConfig.legacy_windows_fs_encoding" 혹은
    "PyConfig_Get("legacy_windows_fs_encoding")"를 사용해주시기를 부탁
    드립니다.

  * "Py_LegacyWindowsStdioFlag": 대신 "PyConfig.legacy_windows_stdio"
    혹은 "PyConfig_Get("legacy_windows_stdio")"를 사용해주시기를 부탁
    드립니다.

  * "Py_FileSystemDefaultEncoding"와
    "Py_HasFileSystemDefaultEncoding": 대신
    "PyConfig.filesystem_encoding" 혹은
    "PyConfig_Get("filesystem_encoding")"를 사용해주시기를 부탁드립니
    다.

  * "Py_FileSystemDefaultEncodeErrors": 대신
    "PyConfig.filesystem_errors" 혹은
    "PyConfig_Get("filesystem_errors")"를 사용해주시기를 부탁드립니다.

  * "Py_UTF8Mode": 대신 "PyPreConfig.utf8_mode" 혹은
    "PyConfig_Get("utf8_mode")"를 사용해주시기를 부탁드립니다. (보다
    자세한 내용의 경우 "Py_PreInitialize()"를 확인해주시기를 부탁드립
    니다.)

  해당하는 옵션들을 설정하기 위해 "Py_InitializeFromConfig()" API를
  "PyConfig"와 함께 사용해주시기를 부탁드립니다. 혹은, 실행 시간에 해
  당하는 옵션 값을 가져오는 방식으로 "PyConfig_Get()"을 사용해주시기를
  부탁드립니다.


파이썬 3.16에서 제거 예정인 항목들
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* 번들로 포함된 "libmpdec" 사본.


파이썬 3.18에서 제거 예정인 항목들
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* 다음의 비공개(private) 함수들은 사용 지원이 중단(deprecated)되었으며
  파이썬 3.18에서 제거될 예정입니다.

  * "_PyBytes_Join()": 대신 "PyBytes_Join()"를 사용해주시기를 부탁드립
    니다.

  * "_PyDict_GetItemStringWithError()": 대신
    "PyDict_GetItemStringRef()"를 사용해주시기를 부탁드립니다.

  * "_PyDict_Pop()": 대신 "PyDict_Pop()"을 사용해주시기를 부탁드립니다
    .

  * "_PyLong_Sign()": 대신 "PyLong_GetSign()"을 사용해주시기를 부탁드
    립니다.

  * "_PyLong_FromDigits()" 그리고 "_PyLong_New()": 대신
    "PyLongWriter_Create()"를 사용해주시기를 부탁드립니다.

  * "_PyThreadState_UncheckedGet()": 대신
    "PyThreadState_GetUnchecked()"를 사용해주시기를 부탁드립니다.

  * "_PyUnicode_AsString()": 대신 "PyUnicode_AsUTF8()"를 사용해주시기
    를 부탁드립니다.

  * "_PyUnicodeWriter_Init()": "_PyUnicodeWriter_Init(&writer)"와 같은
    사용 대신 "writer = PyUnicodeWriter_Create(0)"와 같은 사용을 부탁
    드립니다.

  * "_PyUnicodeWriter_Finish()": "_PyUnicodeWriter_Finish(&writer)"와
    같은 사용 대신 "PyUnicodeWriter_Finish(writer)"와 같은 사용을 부탁
    드립니다.

  * "_PyUnicodeWriter_Dealloc()": "_PyUnicodeWriter_Dealloc(&writer)"
    와 같은 사용 대신 "PyUnicodeWriter_Discard(writer)"와 같은 사용을
    부탁드립니다.

  * "_PyUnicodeWriter_WriteChar()":
    "_PyUnicodeWriter_WriteChar(&writer, ch)"와 같은 사용 대신
    "PyUnicodeWriter_WriteChar(writer, ch)"와 같은 사용을 부탁드립니다
    .

  * "_PyUnicodeWriter_WriteStr()": "_PyUnicodeWriter_WriteStr(&writer,
    str)"와 같은 사용 대신 "PyUnicodeWriter_WriteStr(writer, str)"와
    같은 사용을 부탁드립니다.

  * "_PyUnicodeWriter_WriteSubstring()":
    "_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)"와 같은
    사용 대신 "PyUnicodeWriter_WriteSubstring(writer, str, start, end)
    " ""와 같은 사용을 부탁드립니다.

  * "_PyUnicodeWriter_WriteASCIIString()":
    "_PyUnicodeWriter_WriteASCIIString(&writer, str)"와 같은 사용 대신
    "PyUnicodeWriter_WriteASCII(writer, str)"와 같은 사용을 부탁드립니
    다.

  * "_PyUnicodeWriter_WriteLatin1String()":
    "_PyUnicodeWriter_WriteLatin1String(&writer, str)"와 같은 사용 대
    신 "PyUnicodeWriter_WriteUTF8(writer, str)"와 같은 사용을 부탁드립
    니다.

  * "_PyUnicodeWriter_Prepare()": (다른 직접적인 대안이 없습니다.)

  * "_PyUnicodeWriter_PrepareKind()": (다른 직접적인 대안이 없습니다.)

  * "_Py_HashPointer()": 대신 "Py_HashPointer()"를 사용해주시기를 부탁
    드립니다.

  * "_Py_fopen_obj()": 대신 "Py_fopen()"를 사용해주시기를 부탁드립니다
    .

  pythoncapi-compat 프로젝트를 통해 Python 3.13 및 그 이전 버전에서 새
  로운 공개 함수를 사용할 수 있습니다.


향후 보다 상위 버전의 제거 예정 항목들
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

다음의 API는 사용 지원 중단(deprecated)되었습니다. 제거될 예정이지만,
아직 구체적인 제거 일정이 정해지지는 않았습니다.

* "Py_TPFLAGS_HAVE_FINALIZE": 파이썬 3.8부터 활용되고 있지 않습니다.

* "PyErr_Fetch()": 대신 "PyErr_GetRaisedException()"를 사용해주시기를
  부탁드립니다.

* "PyErr_NormalizeException()": 대신 "PyErr_GetRaisedException()"를 사
  용해주시기를 부탁드립니다.

* "PyErr_Restore()": 대신 "PyErr_SetRaisedException()"를 사용해주시기
  를 부탁드립니다.

* "PyModule_GetFilename()": 대신 "PyModule_GetFilenameObject()"를 사용
  해주시기를 부탁드립니다.

* "PyOS_AfterFork()": 대신 "PyOS_AfterFork_Child()"를 사용해주시기를
  부탁드립니다.

* "PySlice_GetIndicesEx()": 대신 "PySlice_Unpack()"과
  "PySlice_AdjustIndices()"를 사용해주시기를 부탁드립니다.

* "PyUnicode_READY()": 파이썬 3.12부터 활용되고 있지 않습니다.

* "PyErr_Display()": 대신 "PyErr_DisplayException()"를 사용해주시기를
  부탁드립니다.

* "_PyErr_ChainExceptions()": 대신 "_PyErr_ChainExceptions1()"를 사용
  해주시기를 부탁드립니다.

* "PyBytesObject.ob_shash": 대신 "PyObject_Hash()"를 사용해주시기를 부
  탁드립니다.

* 스레드 로컬 저장소 (Thread Local Storage; TLS) API:

  * "PyThread_create_key()": 대신 "PyThread_tss_alloc()"를 사용해주시
    기를 부탁드립니다.

  * "PyThread_delete_key()": 대신 "PyThread_tss_free()"를 사용해주시기
    를 부탁드립니다.

  * "PyThread_set_key_value()": 대신 "PyThread_tss_set()"를 사용해주시
    기를 부탁드립니다.

  * "PyThread_get_key_value()": 대신 "PyThread_tss_get()"를 사용해주시
    기를 부탁드립니다.

  * "PyThread_delete_key_value()": 대신 "PyThread_tss_delete()"를 사용
    해주시기를 부탁드립니다.

  * "PyThread_ReInitTLS()": 파이썬 3.7부터 활용되고 있지 않습니다.


빌드 변경 사항들
================

* **PEP 776**: Emscripten은 이제 **3단계 (Tier 3)** 플랫폼으로 공식 지
  원됩니다. 해당하는 작업의 일환으로 Emscripten libc에서 25개가 넘는
  버그가 수정되었습니다. Emscripten은 이제 "ctypes", "termios" 및
  "fcntl" 모듈을 지원하며, 새로운 기본 대화형 셸에 대한 실험적 지원도
  포함합니다. (R. Hood Chatham이 gh-127146, gh-127683 및 gh-136931를
  통해 기능을 구현하였습니다.)

* 공식 Android용 바이너리 릴리스가 이제 python.org에서 제공됩니다.

* GNU Autoconf 2.72가 이제 "configure"를 생성하는 데 필요합니다.
  (Erlend Aasland가 gh-115765를 통해 기능을 구현하였습니다.)

* *wasm32-unknown-emscripten*은 이제 **PEP 11**에서 규정하는 3단계
  (Tier 3) 플랫폼입니다. (R. Hood Chatham이 gh-127146, gh-127683, 그리
  고 gh-136931를 통해 기능을 구현하였습니다.)

* *python3*.lib*에 대한 *#pragma* 기반 링킹은 이제 Py_NO_LINK_LIB로 끌
  수 있습니다. (Jean-Christophe Fillion-Robin이 gh-82909를 통해 기능을
  구현하였습니다.)

* CPython은 이제 보안 향상을 위해 권장 컴파일러 옵션 집합을 기본적으로
  활성화합니다. 이를 비활성화하려면 "--disable-safety" "configure" 옵
  션을 사용해주시기를 부탁드립니다. 성능 비용을 감수하더라도 더 큰 컴
  파일러 옵션 집합을 사용하려면 "--enable-slower-safety" 옵션을 사용해
  주시기를 부탁드립니다.

* *WITH_FREELISTS* 매크로와 *--without-freelists* "configure" 옵션이
  제거되었습니다.

* 새로운 "configure" 옵션 "--with-tail-call-interp"을 사용하여 실험적
  인 꼬리 호출 인터프리터를 활성화할 수 있습니다. 자세한 내용은 새로운
  형의 인터프리터를 참조해주시기를 부탁드립니다.

* 새로운 원격 디버깅 지원을 비활성화하려면 "--without-remote-debug"
  "configure" 옵션을 사용해주시기를 부탁드립니다. 이는 보안상의 이유로
  유용할 수 있습니다.

* iOS 및 macOS 앱은 이제 *stdout* 및 *stderr* 콘텐츠를 시스템 로그로
  리디렉션하도록 구성할 수 있습니다. (Russell Keith-Magee가 gh-127592
  를 통해 기능을 구현하였습니다.)

* iOS 테스트베드는 이제 테스트가 실행되는 동안 테스트 출력을 스트리밍
  할 수 있습니다. 또한 테스트베드를 CPython 자체가 아닌 다른 프로젝트
  의 테스트 스위트를 실행하는 데 사용할 수 있습니다. (Russell Keith-
  Magee가 gh-127592를 통해 기능을 구현하였습니다.)


"build-details.json"
--------------------

파이썬 설치에는 이제 새 파일 "build-details.json"이 포함됩니다. 해당하
는 파일은 CPython의 빌드 세부 정보를 담은 정적 JSON 문서이며, 코드를
실행하지 않고도 인트로스펙션을 할 수 있게 합니다. 이는 파이썬 런처, 크
로스 컴파일 등의 사용 사례에 유용합니다.

"build-details.json"는 플랫폼 독립적인 표준 라이브러리 디렉터리에 설치
되어야 합니다. 이는 'stdlib' "sysconfig" 설치 경로에 해당하며,
*sysconfig.get_path('stdlib')*를 실행하여 찾을 수 있습니다.

더 보기:

  **PEP 739** -- *build-details.json* 1.0 -- 파이썬 빌드 세부 정보를
  담은 정적 설명 파일


PGP 서명 중단
-------------

파이썬 3.14 및 향후 버전의 릴리스에는 PGP(Pretty Good Privacy) 서명이
제공되지 않습니다. CPython 아티팩트를 검증하려면 사용자는 Sigstore 검
증 자료를 사용해야 합니다. 릴리스는 파이썬 3.11부터 Sigstore를 사용하
여 서명되었습니다.

릴리스 절차의 해당 변경 사항은 **PEP 761**에 명시되었습니다.


자유 스레딩의 파이썬이 공식적으로 지원됩니다
--------------------------------------------

파이썬의 자유 스레딩 빌드는 이제 지원되며 더 이상 실험적이지 않습니다.
이는 자유 스레딩의 파이썬이 공식적으로 지원되지만 여전히 선택 사항인
phase II의 시작입니다.

자유 스레딩 팀은 프로젝트가 올바른 방향으로 나아가고 있다고 확신하며,
자유 스레딩을 파이썬 커뮤니티 전반에서 더 폭넓게 도입할 수 있도록 준비
하는 일에 지속적으로 헌신해주시는 모든 분들께 감사드립니다.

이러한 권고와 해당하는 PEP의 수락에 따라, 파이썬 개발자 커뮤니티는 자
유 스레딩이 현재와 앞으로도 지원되는 파이썬 빌드 옵션이며 적절한 폐지
일정 없이 제거되지 않을 것임을 널리 알려야 합니다.

자유 스레딩을 파이썬의 기본 혹은 유일한 빌드로 삼는 phase III로 전환할
지에 대한 결정은 아직 내려지지 않았으며, CPython 자체와 커뮤니티 양쪽
의 많은 요인에 달려 있습니다. 해당하는 결정은 미래에 이루어질 것입니다
.

더 보기:

  **PEP 779**

  PEP 779의 수락


실험적 JIT (just-in-time) 컴파일러용 바이너리 릴리스
----------------------------------------------------

공식 macOS 및 윈도우 릴리스 바이너리에는 이제 *실험적* JIT (just-in-
time) 컴파일러가 포함됩니다. 프로덕션 사용은 **권장되지 않지만**, 환경
변수 "PYTHON_JIT=1"를 설정하여 테스트할 수 있습니다. 다운스트림 소스
빌드와 재배포자는 비슷한 동작을 위해 "--enable-experimental-jit=yes-
off" 구성 옵션을 사용할 수 있습니다.

JIT는 초기 단계에 있으며 여전히 활발하게 개발 중입니다. 따라서 이를 활
성화했을 때의 일반적인 성능 영향은 작업 부하에 따라 10% 느려지는 것부
터 20% 빨라지는 것까지 다양할 수 있습니다. 테스트와 평가를 돕기 위해
"sys._jit" 이름 공간에 인트로스펙션 함수 세트가 제공되었습니다.
"sys._jit.is_available()"를 사용하여 현재 실행 파일이 JIT 컴파일을 지
원하는지 확인할 수 있으며, "sys._jit.is_enabled()"를 사용하여 현재 프
로세스에서 JIT 컴파일이 활성화되었는지 알 수 있습니다.

현재 빠져 있는 기능 중 가장 중요한 것은 *gdb* 및 *perf* 같은 네이티브
디버거와 프로파일러가 JIT 프레임을 통과하여 언와인드를 수행할 수 없다
는 점입니다("pdb" 혹은 "profile" 같은 파이썬 디버거와 프로파일러는 수
정 없이 계속 작동합니다). 자유 스레딩 빌드는 JIT 컴파일을 지원하지 않
습니다.

발견한 모든 버그나 주요 성능 회귀를 보고해주시기를 부탁드립니다!

더 보기: **PEP 744**


파이썬 3.14로의 (코드) 이식
===========================

해당하는 섹션을 통해, 앞서 설명한 변경 사항과, 코드 변경이 필요할 수
있는 기타 버그 수정 사항들을 나열하며 각각에 대한 설명을 드리고자 합니
다.


Python API에서 변경된 점
------------------------

* macOS 이외의 유닉스 플랫폼에서 이제, "multiprocessing" 및
  "ProcessPoolExecutor"에서 기본 시작 메서드는 *fork*가 아니라
  *forkserver*입니다.

  자세한 내용은 (1) 및 (2)를 참조해주시기를 부탁드립니다.

  "multiprocessing" 혹은 "concurrent.futures"에서 "NameError"나 피클링
  에러가 발생하면, forkserver 제한 사항을 참조해주시기를 부탁드립니다.

  해당하는 변경 사항은 윈도우나 macOS에는 영향을 미치지 않으며, 해당
  플랫폼에서는 'spawn'이 기본 시작 방법으로 유지됩니다.

* "functools.partial"은 이제 메서드 디스크립터입니다. 이전 동작을 보존
  하려면 "staticmethod()"로 감싸주시기를 부탁드립니다. (Serhiy
  Storchaka와 Dominykas Grigonis가 gh-121027를 통해 기능을 구현하였습
  니다.)

* 가비지 수거기가 이제 점진적인 방식으로 동작합니다. 이는
  "gc.collect()"의 동작이 약간 변경된다는 뜻입니다:

  * *gc.collect(1)*: 1세대를 수거하는 대신 가비지 수거의 한 점진적인
    단계를 수행합니다.

  * 그 밖의 "gc.collect()" 호출은 변경되지 않습니다.

* "locale.nl_langinfo()" 함수는 이제 일부 경우에 *LC_CTYPE* 로케일을
  임시로 설정합니다. 해당하는 임시 변경은 다른 스레드에 영향을 미칩니
  다. (Serhiy Storchaka가 gh-69998를 통해 기능을 구현하였습니다.)

* "pickle.dump()" and "pickle.dumps()" now raise "PicklingError" for
  some failures that previously raised "AttributeError",
  "ImportError", "ValueError", "UnicodeEncodeError" or
  "PicklingError", depending on the implementation (for example,
  pickling a local object, or an object whose module cannot be
  imported). The original exception is chained to the "PicklingError".
  Code that caught these exceptions should also catch "PicklingError".
  (Contributed by Serhiy Storchaka in gh-122311.)

* "types.UnionType"은 이제 "typing.Union"의 에일리어스이므로 일부 동작
  이 변경됩니다. 자세한 내용은 위 내용을 참조해주시기를 부탁드립니다.
  (Jelle Zijlstra가 gh-105499를 통해 기능을 구현하였습니다.)

* 어노테이션의 런타임 동작은 여러 방식으로 변경되었습니다. 자세한 내용
  은 위 내용을 참조해주시기를 부탁드립니다. 어노테이션과 상호작용하는
  대부분의 코드는 계속 작동하겠지만, 문서화되지 않은 일부 세부 사항은
  다르게 동작할 수 있습니다.

* "mimetypes" CLI를 공개하는 작업의 일환으로, 이제 실패 시 *0* 대신
  *1*로 종료하고 잘못된 명령줄 매개변수가 있을 때는 *1* 대신 *2*로 종
  료합니다. 에러 메세지는 이제 stderr에 출력됩니다.

* 정규 표현식에서 *B* 패턴은 이제 전체 패턴으로 주어졌을 때 빈 문자열
  과 일치하며, 이로 인해 동작이 변경될 수 있습니다.

* FreeBSD에서 "sys.platform"은 더 이상 주된 버전의 번호를 포함하지 않
  습니다.


어노테이션의 변경 사항(**PEP 649** 및 **PEP 749**)
--------------------------------------------------

해당하는 섹션에는 어노테이션의 지연 평가 관련 변경 사항으로 인해 어노
테이션 혹은 어노테이션과 상호작용하거나 어노테이션을 인트로스펙션하는
파이썬 코드에 필요할 수 있는 변경 사항에 대한 안내가 포함되어 있습니다
.

대부분의 경우, 이전 버전의 파이썬에서 작동하던 코드는 변경이 필요하지
않습니다.


어노테이션이 있는 코드에 미치는 영향
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

코드에 어노테이션을 정의한다면(예를 들어, 정적 형 검사기에서 사용하기
위해), 해당하는 변경 사항의 영향을 받지 않을 가능성이 높습니다. 이전
버전의 파이썬에서 하던 것과 같은 방식으로 어노테이션을 계속 작성할 수
있습니다.

전방 참조에 자주 사용되는, 어노테이션 안의 따옴표로 감싼 문자열을 제거
할 수 있을 가능성이 높습니다. 마찬가지로 어노테이션에 문자열을 작성하
지 않기 위해 *from __future__ import annotations*를 사용한다면, 파이썬
3.14 이상만 지원하게 되었을 때 해당 임포트를 제거할 수 있을 가능성이
큽니다. 그러나, 어노테이션을 읽는 제삼자 라이브러리에 의존하는 경우,
그러한 라이브러리가 예상대로 작동하려면 먼저 따옴표로 감싸지 않은 어노
테이션을 지원하도록 변경되어야 할 수 있습니다.


*__annotations__*를 읽는 코드에 미치는 영향
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

코드가 객체의 "__annotations__" 어트리뷰트를 읽는 경우, 어노테이션의
지연 평가에 의존하는 코드를 지원하기 위해 변경해야 할 수 있습니다. 예
를 들어, 현재 "dataclasses" 모듈이 그렇게 하는 것처럼
"annotationlib.get_annotations()"를 "FORWARDREF" 형식과 함께 사용할 수
있습니다.

외부 typing_extensions 패키지는 "annotationlib" 모듈 기능 중 일부에 대
한 부분 백포트를 제공합니다. 예를 들어, "Format" 열거형과
"get_annotations()" 함수가 이에 해당합니다. 이러한 기능은 파이썬 3.14
의 새로운 동작을 활용하는 여러 버전 호환 코드를 작성하는 데 사용할 수
있습니다.


관련 변경 사항들
~~~~~~~~~~~~~~~~

파이썬 3.14의 변경 사항은 소스 코드에 어노테이션이 포함된 코드와
"__annotations__"를 읽는 코드의 호환성 문제를 최소화하면서, 실행 시간
에 "__annotations__"가 동작하는 방식을 개편하도록 설계되었습니다. 그러
나, 어노테이션 동작의 문서화되지 않은 세부 사항이나 표준 라이브러리의
비공개 함수에 의존한다면, 코드가 파이썬 3.14에서 작동하지 않을 수 있는
경우가 많습니다. 향후 변경 사항으로부터 코드를 보호하려면
"annotationlib" 모듈의 문서화된 기능만 사용해주시기를 부탁드립니다.

특히, 형 객체의 이름 공간 딕셔너리 어트리뷰트에서 어노테이션을 직접 읽
지 말아주시기를 부탁드립니다. 클래스 생성 중에는
"annotationlib.get_annotate_from_class_namespace()"를 사용하고, 그 이
후에는 "annotationlib.get_annotations()"를 사용해주시기를 부탁드립니다
.

이전 릴리스에서는 어노테이션이 있는 클래스의 인스턴스에서 클래스 어노
테이션에 액세스할 수 있는 경우가 있었습니다. 해당하는 동작은 문서화되
지 않은 우발적인 동작이었으며, 파이썬 3.14에서는 더 이상 작동하지 않습
니다.


"from __future__ import annotations"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

파이썬 3.7에서 **PEP 563**은 모든 어노테이션을 문자열로 바꾸는 *from
__future__ import annotations* future 문을 도입하였습니다.

그러나, 이제 해당하는 구문 활용은 폐지되었으며 향후 파이썬 버전에서 제
거될 예정입니다. 해당하는 제거는 어노테이션의 지연 평가를 지원하지 않
는 마지막 파이썬 버전인 파이썬 3.13이 2029년에 수명을 종료한 뒤에야 이
루어질 것입니다.

파이썬 3.14에서 *from __future__ import annotations*를 사용하는 코드의
동작은 변경되지 않습니다.


C API에서 변경된 점
-------------------

* "Py_Finalize()"는 이제 모든 인턴된 문자열을 삭제합니다. 이는
  "Py_Finalize()" 호출 후에도 인턴된 문자열을 계속 보유하고 있다가
  "Py_Initialize()" 호출 후 다시 사용되는 모든 C 확장 모듈에 대해 하위
  호환되지 않는 변경입니다. 해당하는 동작으로 인해 발생하는 문제는 일
  반적으로 이후의 "Py_Initialize()" 호출 실행 중 초기화되지 않은 메모
  리에 액세스함으로써 충돌을 일으킵니다. 이를 해결하려면 주소 새니타이
  저(address sanitizer)를 사용하여 인턴된 문자열에서 비롯된 해제 후 사
  용(use-after-free)을 식별하고 모듈 종료 중에 해당 문자열을 할당 해제
  해주시기를 부탁드립니다. (Eddie Elizondo가 gh-113601를 통해 기능을
  구현하였습니다.)

* 유니코드 예외 객체 C API는 이제 예외 인자가 "UnicodeError" 객체가 아
  닌 경우 "TypeError"를 발생시킵니다. (Bénédikt Tran이 gh-127691를 통
  해 기능을 구현하였습니다.)

* 인터프리터는 내부적으로 객체를 피연산자 스택에 로드할 때 가능한 경우
  *빌린 참조*를 사용하여 일부 참조 횟수 변경을 피합니다. 이로 인해 이
  전 파이썬 버전과 비교해 참조 횟수 값이 더 작아질 수 있습니다. 함수
  인자가 다른 코드에서 참조되지 않는지 판단하기 위해 "Py_REFCNT()"가
  *1*인지 검사하던 C API 확장 모듈은, 대신 더 안전한 대체 수단인
  "PyUnstable_Object_IsUniqueReferencedTemporary()"를 사용해야 합니다.

* 공개 C API로 승격된 비공개 함수들:

  * "_PyBytes_Join()": "PyBytes_Join()"

  * "_PyLong_IsNegative()": "PyLong_IsNegative()"

  * "_PyLong_IsPositive()": "PyLong_IsPositive()"

  * "_PyLong_IsZero()": "PyLong_IsZero()"

  * "_PyLong_Sign()": "PyLong_GetSign()"

  * "_PyUnicodeWriter_Dealloc()": "PyUnicodeWriter_Discard()"

  * "_PyUnicodeWriter_Finish()": "PyUnicodeWriter_Finish()"

  * "_PyUnicodeWriter_Init()": "PyUnicodeWriter_Create()"를 사용해주시
    기를 부탁드립니다.

  * "_PyUnicodeWriter_Prepare()": (다른 직접적인 대안이 없습니다.)

  * "_PyUnicodeWriter_PrepareKind()": (다른 직접적인 대안이 없습니다.)

  * "_PyUnicodeWriter_WriteChar()": "PyUnicodeWriter_WriteChar()"

  * "_PyUnicodeWriter_WriteStr()": "PyUnicodeWriter_WriteStr()"

  * "_PyUnicodeWriter_WriteSubstring()":
    "PyUnicodeWriter_WriteSubstring()"

  * "_PyUnicode_EQ()": "PyUnicode_Equal()"

  * "_PyUnicode_Equal()": "PyUnicode_Equal()"

  * "_Py_GetConfig()": "PyConfig_Get()" 및 "PyConfig_GetInt()"

  * "_Py_HashBytes()": "Py_HashBuffer()"

  * "_Py_fopen_obj()": "Py_fopen()"

  * "PyMutex_IsLocked()" : "PyMutex_IsLocked()"

  이러한 새로운 함수 대부분은 파이썬 3.13 및 이전 버전에서 pythoncapi-
  compat project를 통해 사용할 수 있습니다.


Notable changes in 3.14.5
=========================


gc
--

* The incremental garbage collector shipped in Python 3.14.0-3.14.4
  has been reverted back to the generational garbage collector from
  3.13, due to a number of reports of significant memory pressure in
  production environments. See Garbage collection for details.
