-
-
Notifications
You must be signed in to change notification settings - Fork 33.1k
Open
Labels
3.14bugs and security fixesbugs and security fixes3.15new features, bugs and security fixesnew features, bugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)performancePerformance or resource usagePerformance or resource usagetype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
Bug description:
The following code, consisting of a bunch of dict
lookups and writes, runs in
- < 1 second on Python 3.13
- > 2 seconds on Python 3.14
n = 1000
d = {}
for i in range(n):
d[(i, i)] = d[(i, 0)] = d[(0, i)] = 0
for i in range(1, n):
for j in range(1, n):
d[(i, j)] = i + j + d[(i - 1, j)] + d[(i, j - 1)] + d[(i - 1, j - 1)]
print(d[(n - 1, n - 1)])
Tests are run on a Dell Precision 5490, running Ubuntu:
Linux precision 6.14.0-33-generic #33-Ubuntu SMP PREEMPT_DYNAMIC Wed Sep 17 23:22:02 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Ubuntu 25.04 (Plucky)
The cpython is from python-build-standalone
cpython-3.14.0+20251010-x86_64-unknown-linux-gnu-install_only.tar.gz
cpython-3.13.8+20251010-x86_64-unknown-linux-gnu-install_only.tar.gz
Log
[~/regression-testing]$ hyperfine --warmup=10 "cp313/python/bin/python3.13 dicttest.py" "cp314/python/bin/python3.14 dicttest.py"
Benchmark 1: cp313/python/bin/python3.13 dicttest.py
Time (mean ± σ): 880.8 ms ± 119.7 ms [User: 730.1 ms, System: 150.1 ms]
Range (min … max): 713.3 ms … 1066.2 ms 10 runs
Benchmark 2: cp314/python/bin/python3.14 dicttest.py
Time (mean ± σ): 2.235 s ± 0.035 s [User: 2.066 s, System: 0.168 s]
Range (min … max): 2.168 s … 2.295 s 10 runs
Summary
cp313/python/bin/python3.13 dicttest.py ran
2.54 ± 0.35 times faster than cp314/python/bin/python3.14 dicttest.py
It seems to scale very poorly too. With the same code, but n = 2000
(instead of n = 1000
), leads to 3.3 sec (Python 3.13) vs 20 seconds (Python 3.14)! I.e., Python 3.13 being 5 times faster.
[~/regression-testing]$ hyperfine --warmup=10 "cp313/python/bin/python3.13 dicttest.py" "cp314/python/bin/python3.14 dicttest.py"
Benchmark 1: cp313/python/bin/python3.13 dicttest.py
Time (mean ± σ): 3.458 s ± 0.048 s [User: 2.889 s, System: 0.568 s]
Range (min … max): 3.375 s … 3.521 s 10 runs
Benchmark 2: cp314/python/bin/python3.14 dicttest.py
Time (mean ± σ): 20.084 s ± 0.230 s [User: 19.503 s, System: 0.577 s]
Range (min … max): 19.749 s … 20.345 s 10 runs
Summary
cp313/python/bin/python3.13 dicttest.py ran
5.81 ± 0.10 times faster than cp314/python/bin/python3.14 dicttest.py

Plotting time (in seconds) of the script run with n = 0 ... 2000
.
CPython versions tested on:
3.14
Operating systems tested on:
Linux
Linked PRs
Metadata
Metadata
Assignees
Labels
3.14bugs and security fixesbugs and security fixes3.15new features, bugs and security fixesnew features, bugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)performancePerformance or resource usagePerformance or resource usagetype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error