Python 3.15 Lands Today with an Experimental JIT — Here's What Changed
Python released version 3.15.0 on October 9, 2026, and for the first time in the language's history, an experimental just-in-time (JIT) compiler ships as part of the standard build. The feature has been in development for two release cycles, and it is now available without any special compile flags — though it remains opt-in at runtime.
What the JIT Actually Delivers
The numbers are modest but real. According to the official "What's New" documentation, the JIT improves geometric mean performance by roughly 7–8% on x86-64 Linux and 11–12% on AArch64 macOS versus the tail-calling interpreter. InfoWorld's testing puts the range at 8% to 13% depending on platform and workload — and individual benchmarks can swing much wider, from a 15% slowdown on some microbenchmarks to over 100% speedup on compute-heavy loops.
The JIT uses a tracing frontend and now includes basic register allocation, meaning it can keep frequently used values in CPU registers rather than shuffling them in and out of memory. The build was updated to use LLVM 21, and GNU backtrace and GDB stack unwinding now work through JIT-compiled frames — a practical win for anyone debugging production issues. Reference count elimination for certain object classes is also in, which reduces memory traffic on hot paths.
The Other Big Additions
Beyond the JIT, PEP 810 delivers explicit lazy imports. You can now mark entire modules or specific names for deferred loading, so a large application doesn't pay the import cost of every dependency at startup. This is a real-world win for CLI tools and microservices where cold-start time matters.
PEP 814 adds a built-in frozendict type — an immutable mapping that has existed in third-party packages for years but now lives in the standard library. It is hashable and can serve as a dictionary key or a set member, which makes it useful for caching and function signatures that take keyword-argument snapshots.
PEP 686 makes UTF-8 the default encoding across all platforms, ending years of platform-specific surprises when reading text files on Windows without an explicit encoding argument. A new statistical sampling profiler, profiling.sampling, ships in the standard library as well — zero overhead when idle, low overhead when active, suitable for always-on production profiling.
Free Threading Advances
Free-threaded CPython — the no-GIL build introduced experimentally in 3.13 — continues to mature. The 3.15 release stabilizes more of the internal data structures that suffered contention under concurrent access and expands the test coverage for multithreaded workloads. It is still labeled experimental, but the list of known correctness issues is shrinking.
Should You Upgrade?
The JIT is not a silver bullet. If your bottleneck is I/O, database queries, or network calls, you will not see a meaningful change. Where it helps is CPU-bound numerical processing, tight loops, and workloads that stay in Python rather than dropping into C extensions. For those use cases, the performance gains are real even at this early stage, and the JIT will only improve in subsequent releases as the tracing and optimization passes mature.
Python 3.15 can be downloaded from the official Python website. Major Linux distributions and conda-forge packages will follow in the coming days.