RepoFlow Team · Feb 3, 2026
Python 3.9 to 3.14 Performance Benchmarks for Official Python (CPython)
Official Python (CPython) results across JSON, hashing, strings, loops, and HTTP throughput.
After publishing our Node.js version benchmarks, we got a lot of requests to benchmark Python next. So we ran the same style of tests across Python 3.9 through 3.14 to see what actually changed.
All benchmarks in this article were run against the following Python versions:
3.9.25, 3.10.19, 3.11.14, 3.12.12, 3.13.11, 3.14.2 (latest)
These are stable patch releases across several minor versions, which makes it easier to see trends across the recent Python generations.
3.9.25, 3.10.19, 3.11.14, 3.12.12, 3.13.11, 3.14.2 (latest)
These are stable patch releases across several minor versions, which makes it easier to see trends across the recent Python generations.
HTTP GET throughput
Localhost server using
ThreadingHTTPServer with keep-alive and concurrent clients. Reported as MB/s (with a 1 KB payload, MB/s times 1024 is roughly requests/sec).json.loads speed
Parsing the same JSON payload repeatedly.
json.dumps speed
Serializing the same Python object repeatedly with compact separators.
SHA-256 hashing
hashlib.sha256 throughput (MB/s).Buffer copy (64 KB)
Memory throughput using
memoryview slice assignment (MB/s).Array map plus reduce style loop
A transform plus aggregate pass over a list (ops/s).
String building with +=
Repeated concatenation in a loop (MB/s based on produced bytes).
String building with join
Joining many parts repeatedly (MB/s based on produced bytes).
Integer loop + arithmetic
Tight numeric loop with bit ops (ops/s).
Integer loop with randomized input
Similar loop, but adds randomness using
random.Random(seed) to make it less predictable (ops/s).Base64 encoding
base64.b64encode throughput (MB/s).Parsing Dates
Parsing ISO timestamps repeatedly (ops/s).
Regex Speed
In this run the regex pattern does not match the generated lines, so the harness records 0 matches. The runtime still reflects the cost of attempted matches, but it is not a true “matches/sec” benchmark unless the pattern and fixture actually match.
How the Tests Were Performed
- Hardware: Apple M4, 10 cores, macOS 25.0.0 (arm64)
- Tooling: Custom Python benchmark script (no external frameworks)
Conclusion
Python performance has improved meaningfully across several common building blocks, especially since 3.11, but the “best version” depends on what you do most.
These benchmarks make it easier to see which upgrades are likely to help your workload, and which areas are basically unchanged.
Let us know which benchmark you’d like to see next.
Happy Benchmark Tuesday!
These benchmarks make it easier to see which upgrades are likely to help your workload, and which areas are basically unchanged.
Let us know which benchmark you’d like to see next.
Happy Benchmark Tuesday!
