Version 3.15.0 of the Python programming language has been officially released as the latest stable major version. Compared to Python 3.14, it bundles 5,643 commits from 1,012 contributors, with notable changes in the interpreter, typing, the standard library and the C API.
Interpreter and performance
Key language and runtime changes include:
- PEP 661 – new
sentinelbuilt‑in type for explicit unique marker values. - PEP 686 – Python now uses UTF‑8 as the default encoding, reducing surprises when reading and writing text files.
- PEP 798 – more flexible unpacking in comprehensions.
- PEP 810 – explicit lazy imports for faster startup, important for CLI tools and short‑lived scripts.
- PEP 814 – new immutable
frozendictbuilt‑in type. - PEP 829 – package startup configuration files to centralize configuration in large projects.
- The experimental JIT compiler has been significantly upgraded, delivering about 7–8% geometric‑mean speedup on x86‑64 Linux over the standard interpreter and 11–12% on AArch64 macOS over the tail‑calling interpreter.
Error messages have also been improved again to be clearer and more actionable.
Standard library, typing and C API
On the standard library side, PEP 799 introduces Tachyon, a dedicated high‑frequency statistical sampling profiler and a home for organizing Python profiling tools.
The typing system gets several additions:
- PEP 728 –
TypedDictwith typed extra items. - PEP 747 – annotating type forms with
TypeForm. - PEP 800 – disjoint bases in the type system for more precise static analysis.
For C extensions and embedders:
- PEP 782 – new
PyBytesWriterC API for efficiently creatingbytesobjects. - PEP 788 – protection against finalization issues in the C API.
- PEP 803, 820, 793 – stable ABI for free‑threaded builds and related C API updates.
- PEP 831 – frame pointers enabled by default, improving low‑level observability and system profiling.
Release packaging also changes slightly: official Windows 64‑bit binaries now use the tail‑calling interpreter, while macOS installers ship with free‑threading support enabled by default.
macOS tkinter warning and a playful “what’s new”
There is an important caveat for macOS 27.0 users: IDLE and other GUI apps using the tkinter module may hang when a menu command opens a dialog (for example, IDLE’s About IDLE, Settings, or Open Module), leading to a spinning beach ball and requiring Force Quit. This is due to a behavior change in macOS 27.0 that is believed to affect all current Tk versions.
If you rely on Tk‑based tools on macOS, you may want to delay upgrading to macOS 27.0 or carefully test your workflow. Progress is being tracked in issue #158053.
To celebrate the release, Barry Warsaw built “whatsnewt”, a small TUI text adventure that literally walks you through What’s New in Python 3.15. You wake up in the “Startup Foyer” inside the interpreter and solve 18 puzzles, each based on a real 3.15 feature that you must actually use in code. Some puzzles require a type checker; answers are verified with pyrefly.
The easiest way to play is:
```bash
uvx --python 3.15 whatsnewt
```
The full list of changes is available in the official “What’s new in Python 3.15” document and the detailed changelog; bug reports can be filed at the CPython GitHub issue tracker.
Source: Python Software Foundation, LWN.net










