The performance of Python 3.14.8 and Python 3.15.0 was compared on computers with the AMD Ryzen 7000 series and the 13th-generation of Intel Core processors for desktops, laptops or mini PCs. Both interpreters were 64-bit Python builds running on Windows 11. The benchmarks used pyperformance 1.14.0, with pyperf 2.10.0 as the measurement framework.
Interpretation of the results
Each timing below isthe arithmetic mean of the benchmark’s mean execution times across repeated test sessions, with each session weighted equally. Calibration and warmup values are excluded. Performance factors are calculated from these averaged times, rather than by averaging the reported speedup factors. This produces one combined result for each benchmark.
Lower times are better. Python 3.14 serves as the reference. A result of 1.50× faster means that Python 3.15 takes about two-thirds as long, or 33.33% less elapsed time. A result of 1.20× slower means 20% more elapsed time. The “Time change” column shows the percentage change relative to Python 3.14; negative values indicate shorter execution times.
The overall result is the geometric mean of the per-benchmark speedup factors. Each paired benchmark receives equal weight in this calculation, regardless of its execution time. This summarizes performance across the benchmark suite, rather than a prediction of how much faster an entire application will run. Timings are rounded for readability; all calculations use unrounded values.
Blue results indicate shorter execution times, and red results indicate longer execution times. Changes of at least 1.10× are shown in bold. † marks measurements that varied considerably or changed direction between sessions. The magnitude of these averaged results, as well as small differences near parity, should be interpreted with caution. The averaged tables are descriptive; they do not claim statistical significance for every difference.
| Computer | Paired benchmarks | Geometric mean speedup | Equivalent time change |
|---|---|---|---|
| AMD Ryzen 9 7900 | 122 | 1.451× faster | -31.10% |
| Intel Core i3-1315U | 118 | 1.451× faster | -31.10% |
The identical value of 1.451× in both rows is due to rounding. The calculated values are approximately 1.451413092× for AMD and 1.451321030× for Intel. The benchmark sets contain 122 and 118 tests, respectively, so they are not identical. This result does not imply the same benefit for every application or an advantage for either processor manufacturer.
Python 3.15 is faster across most of the tested workloads, with an overall geometric mean speedup of approximately 1.45× on both computers. The biggest gains come from Ascii85, Base32 and Base85 encoding benchmarks. Excluding these six exceptional results, the rest of the suite improves by approximately 1.20×. Several Base16 and regular-expression benchmarks become slower, so the benefit depends on the workload.
AMD Ryzen 9 7900 desktop
The AMD system is a desktop with a Ryzen 9 7900 processor, DDR5 RAM and an M.2 PCIe Gen4 NVMe drive.
There are 122 paired benchmarks on this computer. The averaged results give Python 3.15 a geometric mean speedup of 1.451×, equivalent to approximately 31.1% less elapsed time in the normalized suite summary. The median benchmark speedup is 1.184×, showing that the overall average is lifted by a small number of exceptionally large improvements.
The largest gains are in base32_large (134.748× faster), ascii85_large (68.675× faster), base85_large (63.446× faster). The small-input versions of these encoding benchmarks also improve substantially.
The largest clear averaged slowdowns are in base16_large (1.223× slower), base16_small (1.222× slower), regex_effbot (1.222× slower). These regressions are particularly relevant to applications that rely heavily on those operations.
The AMD results were broadly consistent across repeated measurements. Startup without the site module stays close to parity, and logging_silent includes a noisy measurement, so their small or precise changes deserve less weight than the large, repeatable gains.
| Benchmark | Python 3.14.8 | Python 3.15.0 | Time change |
|---|---|---|---|
2to3 |
229.3 ms | 207.6 ms (1.105× faster) | -9.47% |
ascii85_large |
797.9 ms | 11.62 ms (68.675× faster) | -98.54% |
ascii85_small |
14.88 ms | 0.3875 ms (38.394× faster) | -97.40% |
async_generators |
269.8 ms | 237.9 ms (1.134× faster) | -11.82% |
async_tree_cpu_io_mixed |
420.2 ms | 393.4 ms (1.068× faster) | -6.38% |
async_tree_cpu_io_mixed_tg |
404.4 ms | 380.8 ms (1.062× faster) | -5.83% |
async_tree_eager |
124.2 ms | 98.19 ms (1.265× faster) | -20.94% |
async_tree_eager_cpu_io_mixed |
349 ms | 322.5 ms (1.082× faster) | -7.60% |
async_tree_eager_cpu_io_mixed_tg |
365.3 ms | 342.9 ms (1.065× faster) | -6.12% |
async_tree_eager_io |
652.8 ms | 588.9 ms (1.108× faster) | -9.78% |
async_tree_eager_io_tg |
610.1 ms | 558.3 ms (1.093× faster) | -8.49% |
async_tree_eager_memoization |
190.5 ms | 170.7 ms (1.116× faster) | -10.40% |
async_tree_eager_memoization_tg |
243.9 ms | 224 ms (1.089× faster) | -8.17% |
async_tree_eager_tg |
184.9 ms | 166.3 ms (1.112× faster) | -10.07% |
async_tree_io |
617.5 ms | 558.8 ms (1.105× faster) | -9.50% |
async_tree_io_tg |
581.5 ms | 511.6 ms (1.137× faster) | -12.02% |
async_tree_memoization |
308.5 ms | 278 ms (1.109× faster) | -9.86% |
async_tree_memoization_tg |
267.1 ms | 240.1 ms (1.112× faster) | -10.11% |
async_tree_none |
248.5 ms | 225.8 ms (1.101× faster) | -9.15% |
async_tree_none_tg |
215.4 ms | 194.4 ms (1.108× faster) | -9.73% |
asyncio_tcp |
458.4 ms | 435.2 ms (1.053× faster) | -5.05% |
asyncio_tcp_ssl |
1.258 sec | 1.219 sec (1.031× faster) | -3.05% |
asyncio_websockets |
141.6 ms | 125.6 ms (1.128× faster) | -11.33% |
base16_large |
4.714 ms | 5.767 ms (1.223× slower) | +22.34% |
base16_small |
252.3 us | 308.3 us (1.222× slower) | +22.20% |
base32_large |
327.6 ms | 2.431 ms (134.748× faster) | -99.26% |
base32_small |
6.227 ms | 0.163 ms (38.200× faster) | -97.38% |
base64_large |
6.746 ms | 1.852 ms (3.643× faster) | -72.55% |
base64_small |
219.5 us | 169.2 us (1.297× faster) | -22.91% |
base85_large |
272.4 ms | 4.293 ms (63.446× faster) | -98.42% |
base85_small |
4.864 ms | 0.1505 ms (32.313× faster) | -96.91% |
bench_mp_pool |
126 ms | 112 ms (1.125× faster) | -11.08% |
bench_thread_pool |
738.9 us | 658.8 us (1.122× faster) | -10.84% |
bpe_tokeniser |
2.968 sec | 2.318 sec (1.280× faster) | -21.90% |
chameleon |
9.954 ms | 8.428 ms (1.181× faster) | -15.33% |
chaos |
44.06 ms | 31.3 ms (1.408× faster) | -28.98% |
comprehensions |
12.2 us | 8.117 us (1.503× faster) | -33.47% |
connected_components |
388.3 ms | 365.8 ms (1.061× faster) | -5.78% |
coroutines |
17.05 ms | 12.87 ms (1.325× faster) | -24.50% |
coverage |
52.53 ms | 48.64 ms (1.080× faster) | -7.39% |
create_gc_cycles |
1.03 ms | 0.8892 ms (1.158× faster) | -13.66% |
crypto_pyaes |
50.48 ms | 39.17 ms (1.289× faster) | -22.41% |
dask |
720.2 ms | 687.5 ms (1.048× faster) | -4.54% |
deepcopy |
174.8 us | 129.9 us (1.346× faster) | -25.69% |
deepcopy_memo |
19.74 us | 14.64 us (1.349× faster) | -25.86% |
deepcopy_reduce |
1.899 us | 1.541 us (1.232× faster) | -18.83% |
deltablue |
2.508 ms | 1.669 ms (1.503× faster) | -33.46% |
django_template |
24.56 ms | 20.47 ms (1.200× faster) | -16.67% |
docutils |
1.425 sec | 1.272 sec (1.120× faster) | -10.74% |
dulwich_log |
48.84 ms | 44.74 ms (1.092× faster) | -8.40% |
fannkuch |
280.5 ms | 208.5 ms (1.345× faster) | -25.65% |
fastapi_http |
454.7 ms | 399.9 ms (1.137× faster) | -12.06% |
float |
57.28 ms | 44.02 ms (1.301× faster) | -23.16% |
gc_traversal |
1.807 ms | 1.682 ms (1.074× faster) | -6.89% |
generators |
23.32 ms | 16.29 ms (1.431× faster) | -30.14% |
go |
89.44 ms | 59.34 ms (1.507× faster) | -33.65% |
hexiom |
4.914 ms | 3.178 ms (1.546× faster) | -35.32% |
html5lib |
33.73 ms | 28.44 ms (1.186× faster) | -15.68% |
json_dumps |
6.731 ms | 4.862 ms (1.384× faster) | -27.77% |
json_loads |
14.53 us | 13.06 us (1.113× faster) | -10.15% |
k_core |
1.708 sec | 1.616 sec (1.057× faster) | -5.39% |
logging_format |
6.286 us | 5.081 us (1.237× faster) | -19.18% |
logging_silent † |
75.05 ns | 51.26 ns (1.464× faster †) | -31.69% |
logging_simple |
5.845 us | 4.72 us (1.238× faster) | -19.25% |
mako |
7.97 ms | 6.643 ms (1.200× faster) | -16.65% |
many_optionals |
386.7 us | 297.7 us (1.299× faster) | -23.02% |
mdp |
829.3 ms | 661.3 ms (1.254× faster) | -20.25% |
meteor_contest |
69.78 ms | 60.92 ms (1.145× faster) | -12.70% |
nbody |
89.91 ms | 62.13 ms (1.447× faster) | -30.89% |
nqueens |
65.02 ms | 43.38 ms (1.499× faster) | -33.28% |
pathlib |
232.9 ms | 228.7 ms (1.018× faster) | -1.80% |
pickle |
7.953 us | 7.807 us (1.019× faster) | -1.83% |
pickle_dict |
20.5 us | 17.69 us (1.159× faster) | -13.73% |
pickle_list |
3.041 us | 2.82 us (1.078× faster) | -7.26% |
pickle_pure_python |
217.3 us | 175.2 us (1.240× faster) | -19.38% |
pidigits |
129.7 ms | 128.8 ms (1.007× faster) | -0.69% |
pprint_pformat |
1.034 sec | 0.8316 sec (1.243× faster) | -19.55% |
pprint_safe_repr |
502.5 ms | 413.3 ms (1.216× faster) | -17.76% |
pyflate |
323 ms | 239.9 ms (1.346× faster) | -25.73% |
python_startup |
35.18 ms | 34.36 ms (1.024× faster) | -2.34% |
python_startup_no_site † |
29.09 ms | 29.23 ms (1.005× slower †) | +0.47% |
raytrace |
192.8 ms | 144 ms (1.339× faster) | -25.34% |
regex_compile |
75.55 ms | 54.3 ms (1.391× faster) | -28.12% |
regex_dna |
107.9 ms | 118.7 ms (1.100× slower) | +10.00% |
regex_effbot |
1.588 ms | 1.94 ms (1.222× slower) | +22.17% |
regex_v8 |
14.92 ms | 15.13 ms (1.014× slower) | +1.38% |
richards |
31.37 ms | 22.75 ms (1.379× faster) | -27.47% |
richards_super |
35.52 ms | 26.14 ms (1.359× faster) | -26.42% |
scimark_fft |
217.5 ms | 163.4 ms (1.331× faster) | -24.89% |
scimark_lu |
77.23 ms | 54.56 ms (1.416× faster) | -29.35% |
scimark_monte_carlo |
48.66 ms | 36.72 ms (1.325× faster) | -24.54% |
scimark_sor |
93.32 ms | 62.58 ms (1.491× faster) | -32.94% |
scimark_sparse_mat_mult |
3.372 ms | 2.504 ms (1.347× faster) | -25.76% |
shortest_path |
397.5 ms | 372.7 ms (1.067× faster) | -6.24% |
spectral_norm |
77.96 ms | 52.58 ms (1.483× faster) | -32.55% |
sphinx |
617.7 ms | 552.5 ms (1.118× faster) | -10.56% |
sqlalchemy_declarative |
61.12 ms | 54.38 ms (1.124× faster) | -11.02% |
sqlalchemy_imperative |
6.798 ms | 5.959 ms (1.141× faster) | -12.35% |
sqlglot_v2_normalize |
71.32 ms | 58.48 ms (1.220× faster) | -18.01% |
sqlglot_v2_optimize |
33.61 ms | 27.93 ms (1.203× faster) | -16.88% |
sqlglot_v2_parse |
869.3 us | 621.4 us (1.399× faster) | -28.52% |
sqlglot_v2_transpile |
1.05 ms | 0.7834 ms (1.340× faster) | -25.39% |
sqlite_synth |
1.523 us | 1.37 us (1.112× faster) | -10.04% |
subparsers |
6.756 ms | 5.747 ms (1.176× faster) | -14.94% |
sympy_expand |
258.3 ms | 220 ms (1.174× faster) | -14.84% |
sympy_integrate |
11.35 ms | 9.662 ms (1.175× faster) | -14.90% |
sympy_str |
149.4 ms | 124.8 ms (1.198× faster) | -16.50% |
sympy_sum |
78.46 ms | 66.41 ms (1.181× faster) | -15.35% |
telco |
4.94 ms | 4.111 ms (1.202× faster) | -16.78% |
tomli_loads |
1.585 sec | 1.023 sec (1.549× faster) | -35.45% |
tornado_http |
99.88 ms | 93.48 ms (1.068× faster) | -6.41% |
typing_runtime_protocols |
107 us | 88.07 us (1.215× faster) | -17.69% |
unpack_sequence |
48.21 ns | 31.01 ns (1.555× faster) | -35.68% |
unpickle |
8.886 us | 8.827 us (1.007× faster) | -0.67% |
unpickle_list |
2.806 us | 2.865 us (1.021× slower) | +2.11% |
unpickle_pure_python |
157.6 us | 116.6 us (1.352× faster) | -26.01% |
urlsafe_base64_small |
340.4 us | 206.1 us (1.651× faster) | -39.45% |
xdsl_constant_fold |
24.33 ms | 20.97 ms (1.160× faster) | -13.81% |
xml_etree_generate |
59.89 ms | 50.36 ms (1.189× faster) | -15.92% |
xml_etree_iterparse |
54.9 ms | 47.99 ms (1.144× faster) | -12.59% |
xml_etree_parse |
80.08 ms | 77.91 ms (1.028× faster) | -2.71% |
xml_etree_process |
42.23 ms | 34.81 ms (1.213× faster) | -17.58% |
| Result (geometric mean) | — | 1.451× faster | -31.10% |
Units: sec = seconds; ms = milliseconds; us = microseconds; ns = nanoseconds. A common unit is used for both timings within each row. † indicates measurements requiring additional caution.
Performance by benchmark group
The following table summarizes benchmarks carrying the indicated pyperformance tag. Groups may overlap and do not cover every benchmark. The math group contains only three tests; it is not a summary of every numerical benchmark in the suite.
| Group | Paired benchmarks | Python 3.15 vs Python 3.14 | Equivalent time change |
|---|---|---|---|
apps |
7 | 1.130× faster | -11.52% |
asyncio |
21 | 1.113× faster | -10.13% |
math |
3 | 1.238× faster | -19.21% |
regex |
4 | 1.005× faster | -0.52% |
serialize |
25 | 3.046× faster | -67.17% |
startup |
2 | 1.010× faster | -0.95% |
template |
2 | 1.200× faster | -16.66% |
Benchmarks recorded only for Python 3.14 and excluded from the paired comparison: genshi_text, genshi_xml. The supplied data does not establish why these Python 3.15 results are absent.
13th Gen Intel Core Mobile Processor
The Intel system is a mini PC with a Core i3-1315U processor, DDR4 RAM and an M.2 PCIe Gen4 NVMe drive. The i3-1315U is a mobile processor also used in laptops.
There are 118 paired benchmarks on this computer. The averaged results give Python 3.15 a geometric mean speedup of 1.451×, equivalent to approximately 31.1% less elapsed time in the normalized suite summary. The median benchmark speedup is 1.166×, showing that the overall average is lifted by a small number of exceptionally large improvements.
The largest gains are in base32_large (142.255× faster), base85_large (62.619× faster), ascii85_large (56.825× faster). The small-input versions of these encoding benchmarks also improve substantially.
The largest clear averaged slowdowns are in base16_small (1.241× slower), base16_large (1.158× slower), regex_effbot (1.133× slower). These regressions are particularly relevant to applications that rely heavily on those operations.
The Intel measurements were more variable. In particular, the reported gains for pathlib, sphinx, scimark_sor, scimark_sparse_mat_mult and spectral_norm were sensitive to the test session. Some pathlib and thread-pool measurements contain unusually slow samples. Averaging gives a useful combined view, but those individual values should not be treated as precise estimates for another machine.
| Benchmark | Python 3.14.8 | Python 3.15.0 | Time change |
|---|---|---|---|
2to3 |
277.1 ms | 247.6 ms (1.119× faster) | -10.65% |
ascii85_large |
828.8 ms | 14.58 ms (56.825× faster) | -98.24% |
ascii85_small |
15.57 ms | 0.4626 ms (33.666× faster) | -97.03% |
async_generators |
280.8 ms | 230.4 ms (1.219× faster) | -17.96% |
async_tree_cpu_io_mixed |
435.1 ms | 397.7 ms (1.094× faster) | -8.59% |
async_tree_cpu_io_mixed_tg |
423.2 ms | 411.9 ms (1.027× faster) | -2.66% |
async_tree_eager |
118.4 ms | 104.9 ms (1.129× faster) | -11.42% |
async_tree_eager_cpu_io_mixed |
382.7 ms | 360.1 ms (1.063× faster) | -5.90% |
async_tree_eager_cpu_io_mixed_tg |
383.3 ms | 362 ms (1.059× faster) | -5.56% |
async_tree_eager_io |
572.6 ms | 513.3 ms (1.116× faster) | -10.36% |
async_tree_eager_io_tg |
561.1 ms | 509 ms (1.102× faster) | -9.28% |
async_tree_eager_memoization |
216 ms | 196.2 ms (1.101× faster) | -9.16% |
async_tree_eager_memoization_tg |
247.5 ms | 227.3 ms (1.089× faster) | -8.19% |
async_tree_eager_tg |
191.6 ms | 170.4 ms (1.124× faster) | -11.07% |
async_tree_io |
593.4 ms | 517.4 ms (1.147× faster) | -12.81% |
async_tree_io_tg |
567.9 ms | 495.3 ms (1.147× faster) | -12.78% |
async_tree_memoization |
306.3 ms | 274.5 ms (1.116× faster) | -10.38% |
async_tree_memoization_tg |
285.9 ms | 252.9 ms (1.130× faster) | -11.54% |
async_tree_none |
253.3 ms | 220.6 ms (1.148× faster) | -12.92% |
async_tree_none_tg |
228.9 ms | 203.7 ms (1.123× faster) | -10.98% |
asyncio_tcp |
582.6 ms | 539 ms (1.081× faster) | -7.48% |
asyncio_tcp_ssl |
1.537 sec | 1.527 sec (1.007× faster) | -0.66% |
asyncio_websockets |
181.7 ms | 157.8 ms (1.151× faster) | -13.15% |
base16_large |
6.161 ms | 7.132 ms (1.158× slower) | +15.75% |
base16_small |
298.5 us | 370.3 us (1.241× slower) | +24.07% |
base32_large |
360.9 ms | 2.537 ms (142.255× faster) | -99.30% |
base32_small |
7.102 ms | 0.1753 ms (40.509× faster) | -97.53% |
base64_large |
8.03 ms | 1.869 ms (4.297× faster) | -76.73% |
base64_small |
266.4 us | 191.1 us (1.394× faster) | -28.27% |
base85_large |
298.1 ms | 4.761 ms (62.619× faster) | -98.40% |
base85_small |
5.369 ms | 0.1747 ms (30.739× faster) | -96.75% |
bench_mp_pool |
161.1 ms | 142.6 ms (1.130× faster) | -11.47% |
bench_thread_pool † |
1.083 ms | 1.101 ms (1.017× slower †) | +1.71% |
bpe_tokeniser |
3.575 sec | 2.782 sec (1.285× faster) | -22.19% |
chameleon |
11.36 ms | 9.522 ms (1.193× faster) | -16.18% |
chaos |
47.02 ms | 35.8 ms (1.314× faster) | -23.88% |
comprehensions |
13.38 us | 9.357 us (1.430× faster) | -30.09% |
connected_components |
366.4 ms | 354.6 ms (1.033× faster) | -3.22% |
coroutines |
16.6 ms | 13.19 ms (1.258× faster) | -20.53% |
coverage |
160.9 ms | 123.6 ms (1.302× faster) | -23.19% |
create_gc_cycles |
1.711 ms | 1.428 ms (1.198× faster) | -16.53% |
crypto_pyaes |
57.39 ms | 45.55 ms (1.260× faster) | -20.62% |
deepcopy |
206.9 us | 153.5 us (1.348× faster) | -25.81% |
deepcopy_memo |
20.81 us | 15.72 us (1.323× faster) | -24.44% |
deepcopy_reduce |
2.224 us | 1.71 us (1.301× faster) | -23.14% |
deltablue |
2.451 ms | 1.839 ms (1.333× faster) | -24.99% |
django_template |
28.24 ms | 22.76 ms (1.241× faster) | -19.42% |
docutils |
1.794 sec | 1.661 sec (1.080× faster) | -7.42% |
fannkuch |
309 ms | 222.6 ms (1.388× faster) | -27.96% |
fastapi_http |
351.1 ms | 320.7 ms (1.095× faster) | -8.64% |
float |
56.19 ms | 45.04 ms (1.248× faster) | -19.85% |
gc_traversal |
2.853 ms | 2.545 ms (1.121× faster) | -10.81% |
generators |
25.72 ms | 16.94 ms (1.518× faster) | -34.11% |
go |
92.33 ms | 67.09 ms (1.376× faster) | -27.34% |
hexiom |
4.839 ms | 3.443 ms (1.405× faster) | -28.84% |
html5lib |
44.02 ms | 38.9 ms (1.131× faster) | -11.62% |
json_dumps |
7.362 ms | 5.696 ms (1.292× faster) | -22.63% |
json_loads |
17.18 us | 16.01 us (1.073× faster) | -6.82% |
k_core |
1.977 sec | 1.91 sec (1.035× faster) | -3.39% |
logging_format |
7.111 us | 5.871 us (1.211× faster) | -17.44% |
logging_silent |
65.46 ns | 50.39 ns (1.299× faster) | -23.02% |
logging_simple |
6.635 us | 5.423 us (1.223× faster) | -18.26% |
mako |
7.544 ms | 6.543 ms (1.153× faster) | -13.28% |
many_optionals |
585.5 us | 513.5 us (1.140× faster) | -12.30% |
mdp |
970.9 ms | 767 ms (1.266× faster) | -21.00% |
meteor_contest |
86.82 ms | 75.98 ms (1.143× faster) | -12.49% |
nbody |
82.94 ms | 59.03 ms (1.405× faster) | -28.83% |
nqueens |
73.7 ms | 52.9 ms (1.393× faster) | -28.22% |
pathlib † |
88.82 ms | 77.87 ms (1.141× faster †) | -12.33% |
pickle |
9.156 us | 8.568 us (1.069× faster) | -6.41% |
pickle_dict |
24.76 us | 20.2 us (1.226× faster) | -18.43% |
pickle_list |
4.1 us | 3.752 us (1.093× faster) | -8.48% |
pickle_pure_python |
246.7 us | 206 us (1.198× faster) | -16.50% |
pidigits † |
163.1 ms | 163.7 ms (1.003× slower †) | +0.34% |
pprint_pformat |
1.186 sec | 0.9441 sec (1.257× faster) | -20.42% |
pprint_safe_repr |
585.2 ms | 476.1 ms (1.229× faster) | -18.64% |
pyflate |
343.9 ms | 267 ms (1.288× faster) | -22.36% |
python_startup |
31.09 ms | 30.31 ms (1.026× faster) | -2.53% |
python_startup_no_site † |
23.24 ms | 23.16 ms (1.003× faster †) | -0.32% |
raytrace |
223.5 ms | 164.2 ms (1.361× faster) | -26.54% |
regex_compile |
94.27 ms | 76.29 ms (1.236× faster) | -19.07% |
regex_dna |
136.6 ms | 135.9 ms (1.005× faster) | -0.49% |
regex_effbot |
1.71 ms | 1.937 ms (1.133× slower) | +13.30% |
regex_v8 † |
16.61 ms | 15.72 ms (1.057× faster †) | -5.36% |
richards |
32.36 ms | 24.82 ms (1.304× faster) | -23.29% |
richards_super |
36.74 ms | 28.57 ms (1.286× faster) | -22.22% |
scimark_fft |
212.5 ms | 158.1 ms (1.344× faster) | -25.58% |
scimark_lu |
69.29 ms | 52.02 ms (1.332× faster) | -24.92% |
scimark_monte_carlo |
50.14 ms | 36.87 ms (1.360× faster) | -26.47% |
scimark_sor † |
103.8 ms | 57.98 ms (1.790× faster †) | -44.12% |
scimark_sparse_mat_mult † |
3.352 ms | 2.368 ms (1.415× faster †) | -29.35% |
shortest_path |
403.9 ms | 382 ms (1.057× faster) | -5.40% |
spectral_norm † |
77.37 ms | 50.15 ms (1.543× faster †) | -35.18% |
sphinx † |
812.6 ms | 725.8 ms (1.120× faster †) | -10.69% |
sqlglot_v2_normalize |
85.23 ms | 68.7 ms (1.241× faster) | -19.39% |
sqlglot_v2_optimize |
40.98 ms | 34.54 ms (1.186× faster) | -15.71% |
sqlglot_v2_parse |
949.5 us | 737.1 us (1.288× faster) | -22.37% |
sqlglot_v2_transpile |
1.18 ms | 0.9215 ms (1.281× faster) | -21.92% |
sqlite_synth |
1.832 us | 1.704 us (1.075× faster) | -6.96% |
subparsers |
7.632 ms | 6.672 ms (1.144× faster) | -12.57% |
sympy_expand |
337.3 ms | 290.4 ms (1.162× faster) | -13.93% |
sympy_integrate |
14.24 ms | 12.71 ms (1.120× faster) | -10.72% |
sympy_str |
196.8 ms | 171.8 ms (1.145× faster) | -12.67% |
sympy_sum |
100.9 ms | 88.9 ms (1.135× faster) | -11.88% |
telco |
5.451 ms | 4.658 ms (1.170× faster) | -14.55% |
tomli_loads |
1.679 sec | 1.096 sec (1.532× faster) | -34.74% |
tornado_http |
105.5 ms | 102.7 ms (1.027× faster) | -2.61% |
typing_runtime_protocols |
127.7 us | 110.8 us (1.153× faster) | -13.24% |
unpack_sequence |
37.45 ns | 31.33 ns (1.195× faster) | -16.32% |
unpickle |
9.764 us | 9.974 us (1.022× slower) | +2.15% |
unpickle_list |
3.154 us | 3.144 us (1.003× faster) | -0.31% |
unpickle_pure_python |
161.4 us | 123.3 us (1.310× faster) | -23.64% |
urlsafe_base64_small |
417.2 us | 235.3 us (1.773× faster) | -43.58% |
xdsl_constant_fold |
35.23 ms | 31.16 ms (1.131× faster) | -11.56% |
xml_etree_generate |
65.1 ms | 56.4 ms (1.154× faster) | -13.37% |
xml_etree_iterparse |
69.49 ms | 61.14 ms (1.137× faster) | -12.02% |
xml_etree_parse |
108.3 ms | 103.5 ms (1.047× faster) | -4.44% |
xml_etree_process |
46.24 ms | 38.3 ms (1.207× faster) | -17.17% |
| Result (geometric mean) | – | 1.451× faster | -31.10% |
Units: sec = seconds; ms = milliseconds; us = microseconds; ns = nanoseconds. A common unit is used for both timings within each row. † indicates measurements requiring additional caution.
Performance by benchmark group
The following table summarizes benchmarks carrying the indicated pyperformance tag. Groups may overlap and do not cover every benchmark. The math group contains only three tests; it is not a summary of every numerical benchmark in the suite.
| Group | Paired benchmarks | Python 3.15 vs Python 3.14 | Equivalent time change |
|---|---|---|---|
apps |
7 | 1.108× faster | -9.77% |
asyncio |
21 | 1.114× faster | -10.27% |
math |
3 | 1.204× faster | -16.97% |
regex |
4 | 1.037× faster | -3.60% |
serialize |
25 | 3.044× faster | -67.15% |
startup |
2 | 1.015× faster | -1.43% |
template |
2 | 1.196× faster | -16.40% |
Benchmarks recorded only for Python 3.14 and excluded from the paired comparison: dask, genshi_text, genshi_xml, sqlalchemy_declarative, sqlalchemy_imperative. The supplied data does not establish why these Python 3.15 results are absent.
Encoding performance improvements
The largest changes form a clear pattern. The averaged base32_large result improves by about 135× on AMD and 142× on Intel. The large Ascii85 and Base85 benchmarks improve by roughly 57-69×, while the corresponding small-input benchmarks improve by approximately 31-41×. These are specialized operations with much larger gains than most of the suite.
This pattern is consistent with the Python 3.15 release notes: the Base32 and Ascii85/Base85 implementations were rewritten in C, and Base64 also received optimizations. These changes provide a plausible explanation for the observed improvements, although these measurements do not isolate the effect of each code change. The benchmarks measure elapsed time, so they do not establish memory savings.
| Benchmark selection | AMD speedup | Intel speedup |
|---|---|---|
| All paired benchmarks | 1.451× faster | 1.451× faster |
| Excluding the six Ascii85 / Base32 / Base85 benchmarks | 1.203× faster | 1.197× faster |
| Median per-benchmark speedup | 1.184× faster | 1.166× faster |
Removing those six benchmarks leaves 116 paired tests on AMD and 112 on Intel. Their geometric mean speedups are 1.203× and 1.197×, respectively – equivalent to about 17% less elapsed time in these normalized summaries. This is a useful additional view for applications that do little Base32 or Base85 processing.
Implications for application performance
The application-tagged group improves by approximately 1.13× on AMD and 1.11× on Intel. Template rendering improves by about 1.20× on both systems. These results suggest worthwhile gains for some Python-heavy workloads, while also showing why a 1.45× suite average should not be applied directly to every application.
Encoding performance is mixed: the large Base32 and Base85 gains coexist with slower Base16 results. Similarly, the regular-expression group has only a small net improvement, while regex_effbot becomes slower on both computers and regex_dna becomes slower on AMD. Startup averages remain close to parity. The practical effect depends on the operations performed by an application.
The official Python documentation also describes the tail-calling interpreter used by Windows 64-bit release binaries. The tested versions record different compiler identifiers. These results compare complete interpreter builds, so individual gains cannot be attributed solely to the JIT, the compiler or a particular interpreter change.
Both computers show almost the same full-suite average, but they use different hardware and have slightly different paired benchmark sets. This does not establish that either processor vendor benefits more.
Measurement notes
The retained measurements contain 20 worker processes per benchmark per session, with 60 timing values for most benchmarks and 200 for each startup benchmark. The combined timings give equal weight to the session means. Outliers are retained, and unavailable benchmarks are excluded rather than assigned an assumed result.
A † marker is applied when the comparison factor changes by more than 10% between sessions, the mean improvement changes to a slowdown or vice versa, or a timing sample set has a coefficient of variation above 25%. This is a descriptive flag chosen for this article, rather than a formal significance test. It helps identify averages whose size (or small direction near parity) is less reliable.