Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Potentially serious regression in garbage collector performance in Python 3.14 #139951

Copy link
Copy link
@pgdr

Description

@pgdr
Issue body actions

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
Time comparison plot of Python 3.13 vs Python 3.14

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

Reactions are currently unavailable

Metadata

Metadata

Assignees

Labels

3.14bugs and security fixesbugs and security fixes3.15pre-release feature fixes, bugs and security fixespre-release feature fixes, 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
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    Morty Proxy This is a proxified and sanitized view of the page, visit original site.