Python 3.15 Released With Lazy Imports, Default UTF-8, and Upgraded JIT Compiler
The Python steering council has released version 3.15, introducing opt-in lazy imports to reduce application startup times and making UTF-8 the default text encoding across all platforms. The update also features an upgraded experimental just-in-time compiler and a new zero-overhead statistical profiler.
By Tariq Nasser
On October 9, 2026, the Python steering council released version 3.15, shifting the language's default text encoding to UTF-8 and introducing an opt-in mechanism to defer module loading. The update arrives exactly twelve months after version 3.14, bringing a heavily upgraded experimental just-in-time compiler and a new zero-overhead statistical profiler named Tachyon.[1][2][3][5]
The headline feature for large codebases is explicit lazy imports, introduced under Python Enhancement Proposal 810. Traditionally, the Python interpreter loads every imported module at the exact moment the import statement executes, regardless of whether the running program actually goes on to use those dependencies during that specific session.[2][3]
That eager loading behavior creates a severe bottleneck for command-line utilities and dependency-heavy applications, which can lose seconds at launch just parsing files. Under the new system, developers can write a statement that binds the module name to a lightweight proxy instead of executing it immediately.[2][3]
The actual module only loads into memory when the application first attempts to access it. The core development team emphasizes that this is strictly an opt-in capability; existing codebases will behave exactly as they did before unless maintainers explicitly update their import statements to use the new keyword.[2][3]
In many cases, lazy imports can replace both function-local and type-checking imports that were used to defer expensive operations, according to the tooling company Astral. This allows developers to keep their dependency declarations organized in a single block at the top of a file without paying a startup penalty.
Standardizing Text Encoding
The release also fundamentally changes how Python handles text files by making UTF-8 the default encoding across all platforms. Previously, file operations that omitted an explicit encoding argument would fall back to whatever locale the host operating system happened to use at the time of execution.[2][3]
That legacy behavior frequently caused cross-platform bugs, particularly when code developed on Linux systems was executed on Windows machines using different local encodings. By forcing UTF-8 globally, the language eliminates a persistent source of silent data corruption and runtime crashes in text processing.[1][3]
While the standardization prevents future bugs, it requires immediate attention from developers maintaining legacy Windows scripts. Applications that implicitly relied on local system encodings to read older text files will now attempt to parse them as UTF-8, which will trigger decoding errors unless maintainers update the calls to specify the legacy format.[2]
The Python steering council acknowledged that this transition might cause short-term friction for specific enterprise environments. However, the long-term benefit of having a single, predictable text encoding standard across the entire ecosystem far outweighs the temporary cost of updating legacy file operations.[5]
Incremental Compiler Gains
Python 3.15 delivers a significant upgrade to the language's just-in-time compiler, though the feature remains strictly marked as experimental. Rather than promising a universal speedup for all workloads, the release documentation provides specific, measured gains against the standard interpreter based on the underlying hardware architecture.[2][4]
On x86-64 Linux systems, the upgraded compiler achieves a seven to eight percent geometric mean performance improvement over the standard interpreter. The gains are slightly more pronounced on Apple Silicon hardware, where macOS systems see an eleven to twelve percent speedup compared to the tail-calling interpreter.[3][4]
The official 64-bit Windows binaries now utilize the tail-calling interpreter by default, while the macOS installers automatically include support for free-threading. This alignment ensures that developers on different operating systems receive the most optimized execution environment available for their specific platform.[1]
The release also introduces stable application binary interface support for free-threaded builds. This makes it substantially easier for C extension developers to support execution without the Global Interpreter Lock, paving the way for truly multi-threaded Python applications in the future.[3]
Zero-Overhead Profiling
Beyond execution speed, the release introduces a dedicated profiling package designed to help developers identify performance bottlenecks in production environments. The package includes Tachyon, a brand-new statistical profiler based on high-frequency sampling rather than deterministic function-call tracing.[1]
Unlike traditional tracing tools that severely degrade application performance, Tachyon operates with virtually zero overhead, even when sampling at rates up to one million times per second. Crucially, the profiler can attach to a live, running process without requiring any code modifications or a process restart.[2]
Tachyon reports wall-clock time, CPU time or how long each thread holds the Global Interpreter Lock, and it can produce an interactive flame graph, the BetaNews analysis notes. This capability allows engineering teams to diagnose sudden performance regressions in live production systems without disrupting active user sessions.[2]
Because it operates statistically, Tachyon avoids the observer effect that plagues deterministic profilers, where the act of measuring the code fundamentally alters its execution speed. This makes the data it collects far more representative of actual production workloads.
Immutable Data Structures
On the language syntax side, Python 3.15 introduces two new built-in types to replace common developer workarounds. The first is an immutable dictionary type that preserves insertion order but strictly prevents any modifications to its contents after it is created.[3][4]
The new dictionary type serves as the equivalent to a frozen set, providing a standard way to pass configuration data or mapping structures that must remain constant. Because it is immutable, it can be used as a hashable object, provided all its keys and values are also hashable.[3]
The second addition is a sentinel type, which offers a standardized mechanism for creating unique marker values in application programming interfaces. Developers previously relied on homemade idioms, such as instantiating a bare object, to distinguish between a missing argument and an explicitly provided null value.[2][3]
The custom object approach frequently caused subtle bugs, as those instances could misbehave when being copied or serialized, causing identity comparisons to fail. The new built-in sentinel type handles serialization properly, ensuring that marker values remain unique and comparable across different execution contexts.
Ecosystem Transitions
The release of version 3.15 coincides with the end of the five-year support window for Python 3.10, which was first released in October 2021. Major ecosystem tools are already adjusting their baselines, with popular linters increasing their default target versions to match the shifting support window.
The release of version 3.15 coincides with the end of the five-year support window for Python 3.10, which was first released in October 2021.
Maintainers of third-party Python packages are now urged to publish compatible binary wheels on the Python Package Index. With the stable application binary interface locked in for this release series, extensions compiled against the current version are guaranteed to work with all future patch releases.[1]
Key points
- Python 3.15 introduces an opt-in lazy import keyword that defers module loading to improve application startup times.
- The release makes UTF-8 the default text encoding across all operating systems, eliminating a common source of cross-platform bugs.
- An upgraded experimental JIT compiler delivers 7 to 12 percent performance gains on Linux and macOS architectures.
- A new zero-overhead statistical profiler named Tachyon allows developers to diagnose performance issues in live production environments.
What we don’t know
- How many legacy Windows applications will break due to the sudden shift to UTF-8 default encoding.
- When the experimental JIT compiler will be declared stable and enabled by default for all workloads.
- Whether the broader package ecosystem will rapidly adopt the new frozendict and sentinel types in their public APIs.
How we got here
Oct 2021
Python 3.10 is released, beginning a five-year support lifecycle that concludes with the arrival of version 3.15.
Oct 2025
Python 3.14 launches, setting the baseline for the experimental just-in-time compiler's initial architecture.
Oct 2026
Python 3.15 reaches stable status, introducing lazy imports, default UTF-8 encoding, and the Tachyon profiler.
- Core Language Developers
- The Python steering council prioritizes predictable, cross-platform behavior over preserving legacy quirks.
- Performance Engineers
- System optimizers view the new profiling tools as a more immediate win than the experimental JIT compiler.
- Application Maintainers
- Tooling and application developers are focused on the practical benefits of deferred module loading.
Perspectives this story doesn't cover
- Windows System Administrators
- Legacy Application Maintainers
Sources
[1]Python.orgCore Language DevelopersPython Release Python 3.15.0
Read on Python.org →
[2]BetaNewsApplication MaintainersPython 3.15 arrives with lazy imports, UTF-8 by default and a faster JIT
Read on BetaNews →
[3]LinuxiacPerformance EngineersPython 3.15 Released with Faster JIT, Lazy Imports, and UTF-8 by Default
Read on Linuxiac →
[4]PhoronixPerformance EngineersPython 3.15 Released With Experimental JIT Compiler Running Faster - Phoronix
Read on Phoronix →
[5]LWN.netCore Language DevelopersPython 3.15 released [LWN.net]
Read on LWN.net →
More in Technology
See all →Agents API
OpenAI Launches Cloud-Based Codex and Computer-Use Agents API at DevDay 2026
7 sources
Git Internals
How Git Stores Commits, Trees, and Blobs as Content-Addressable Objects in a Directed Acyclic Graph
6 sources
Computational Complexity
The P vs. NP Complexity Barrier: Why Verifying a Solution is Exponentially Faster Than Finding One
6 sources
AI Infrastructure
The Engineering Illusion of the AI 'Kill Switch'
7 sources
Comments
Every angle. Every day.
Get Technology stories with full source coverage and perspective breakdowns, free every day.




