Python timeline
Free Python reference · JavaScript timeline
Python syntax and features timeline
See how Python has changed, one useful feature at a time.
Explore Python 3.6–3.15 in release order. Each lesson explains when features arrived, why you might use them, and which mistakes to avoid. This is a curated guide; the linked official release notes cover the full changelog.
Know Python variables, conditions, loops, and functions before starting. New to Python? Start with Foundations. Older release entries explain history rather than recommend installing an unsupported version.
Jump to version
3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15
December 23, 2016
F-strings put values beside their labels, annotations document variables, and underscores make numeric literals easier to read.
Editorial review October 25, 2026 · Official release notes
June 27, 2018
Dataclasses describe records, dictionary insertion order becomes a language guarantee, and asyncio gains a simpler entry point.
Editorial review October 25, 2026 · Official release notes
October 14, 2019
The walrus operator can reuse a computed value, positional-only parameters clarify APIs, and f-strings can label debugging values.
Editorial review October 25, 2026 · Official release notes
October 5, 2020
Merge dictionaries with explicit precedence, annotate built-in collections, and remove a whole prefix or suffix without strip confusion.
Editorial review October 25, 2026 · Official release notes
October 4, 2021
Structural matching handles shapes, type unions become shorter, and strict zip catches accidentally mismatched inputs.
Editorial review October 25, 2026 · Official release notes
October 24, 2022
Exception groups, structured async tasks, TOML parsing, and more precise tracebacks improve everyday diagnostics.
Editorial review October 25, 2026 · Official release notes
October 2, 2023
Type parameters and type aliases gain dedicated syntax; f-strings accept more ordinary Python expressions.
Editorial review October 25, 2026 · Official release notes
October 7, 2024
Type parameters can have defaults, copy.replace() updates supported records, and CPython experiments with execution models.
Editorial review October 25, 2026 · Official release notes
October 7, 2025
Template strings retain values for processing; annotations defer evaluation; native concurrency options continue evolving.
Editorial review October 25, 2026 · Official release notes
October 9, 2026
Explicit lazy imports, comprehension unpacking, sentinel values, immutable mappings, and UTF-8 defaults expand the language toolkit.
Editorial review October 25, 2026 · Official release notes