Python 3.15
A future version of the Python programming language whose interpreter behavior changes may affect the distribution of code performance hotspots.
Timeline (last 90 days)
Python 3.15 is officially released, and this update includes new features such as lazy imports, the Sentinel type, unpacking operators in comprehensions, and frozen dictionaries.
Python 3.15 includes performance improvements from an experimental JIT compiler, error message optimizations, a statistical sampling profiler, and support for additional entry types in typed dictionaries.
A frozen dictionary (frozendict) is an immutable dictionary; once created, it does not support assignment operations, and any attempt to modify it will throw an exception.
Python 3.15 introduces the Sentinel type, allowing developers to define sentinel values with explicit names, such as MISSING = Sentinel("MISSING") and EMPTY = Sentinel("EMPTY").
Lazy imports do not change import semantics, only the timing at which imports occur; behavior differences may arise in code that depends on import side effects or in situations where module attributes are accessed early in type checking or reflection scenarios.
Python has long lacked an official built-in, low-overhead, and easily visualized performance analysis method, and developers often rely on third-party tools such as py-spy; 3.15 brings sampling profiling capability into the standard library, lowering the barrier to performance tuning.
Recommended workflow: use the 3.15 sampling profiler to collect data, generate a flame graph to locate macroscopic bottlenecks, then use a source heatmap to pinpoint code lines precisely.
Developers only need to add "3.15" to python-version in their GitHub Actions test matrix to use Python 3.15 in CI.
Python 3.15's sampling profiler supports a mode that attaches to an already running process, which requires the target process's PID as an entry parameter.
Simon Willison says the purpose of datasette-ports displaying PIDs is to make it more convenient for users to attach the new profiler introduced in Python 3.15 to running Datasette processes.
23 more timeline events
All Facts (20)
Hugo van Kemenade serves as the release manager for both Python 3.14 and 3.15.
60%UnverifiedPython 3.15 plans to unify the default encoding to UTF-8 via PEP 686.
60%UnverifiedPython 3.15 includes performance improvements from an experimental JIT compiler, error message optimizations, a statistical sampling profiler, and support for additional entry types in typed dictionaries.
50%UnverifiedLazy imports do not change import semantics, only the timing at which imports occur; behavior differences may arise in code that depends on import side effects or in situations where module attributes are accessed early in type checking or reflection scenarios.
50%UnverifiedPython 3.15 introduces the Sentinel type, allowing developers to define sentinel values with explicit names, such as MISSING = Sentinel("MISSING") and EMPTY = Sentinel("EMPTY").
50%UnverifiedA frozen dictionary (frozendict) is an immutable dictionary; once created, it does not support assignment operations, and any attempt to modify it will throw an exception.
50%UnverifiedPython has long lacked an official built-in, low-overhead, and easily visualized performance analysis method, and developers often rely on third-party tools such as py-spy; 3.15 brings sampling profiling capability into the standard library, lowering the barrier to performance tuning.
50%UnverifiedRecommended workflow: use the 3.15 sampling profiler to collect data, generate a flame graph to locate macroscopic bottlenecks, then use a source heatmap to pinpoint code lines precisely.
50%UnverifiedDevelopers only need to add "3.15" to python-version in their GitHub Actions test matrix to use Python 3.15 in CI.
50%UnverifiedPython 3.15's sampling profiler supports a mode that attaches to an already running process, which requires the target process's PID as an entry parameter.
50%UnverifiedSimon Willison says the purpose of datasette-ports displaying PIDs is to make it more convenient for users to attach the new profiler introduced in Python 3.15 to running Datasette processes.
50%UnverifiedPython 3.15 introduces a sampling-based profiler that captures call stack snapshots at a fixed frequency, has little impact on program performance, and is suitable for analyzing long-running services.
50%UnverifiedIn Python 3.15, the What's New guide was curated by Hugo van Kemenade, release manager for 3.14 and 3.15.
50%UnverifiedAccording to developer Miguel Grinberg's tests on 3.15.0rc3, Python 3.15's overall performance is basically on par with 3.14, with the experimental JIT the only exception.
50%UnverifiedThe process of upgrading to Python 3.15 with uv includes: uv self update, uv python install 3.15, uv python pin --global 3.15.
50%UnverifiedPython 3.15 includes the explicit lazy imports feature from PEP 810, which allows module imports to be deferred using the lazy import syntax.
50%UnverifiedOnce the RC stage begins, only reviewed code changes that are clearly bug fixes are permitted to be merged into the main branch, and no new features are added.
50%UnverifiedAny binary wheel compiled against a Python 3.15.0 RC release will be compatible with all future Python 3.15.x versions.
50%UnverifiedPython 3.15 is officially released, and this update includes new features such as lazy imports, the Sentinel type, unpacking operators in comprehensions, and frozen dictionaries.
50%UnverifiedPython 3.15 adds the sampling profiler Tachyon (profiling.sampling) to the standard library and renames the existing tracing profiler cProfile to profiling.tracing.
50%