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 introduces the sentinel type, freeing state markers from None and bare object().
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.
24 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%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 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%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%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%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%UnverifiedDevelopers only need to add "3.15" to python-version in their GitHub Actions test matrix to use Python 3.15 in CI.
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'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%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%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%UnverifiedIn Python 3.15, the What's New guide was curated by Hugo van Kemenade, release manager for 3.14 and 3.15.
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%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 introduces the sentinel type, freeing state markers from None and bare object().
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%