Articles October 27, 2025 7 min read
In this article, the performance test results of Python version 3.14 are presented and compared with the results obtained for earlier releases — 3.13, 3.12, 3.11, and 3.10. A total of over 100 diverse benchmark tests were conducted, covering both computational operations and tasks related to data processing, input/output operations, and application startup.
The tests were performed using the pyperformance 1.12.0 library on computers running Windows 11. Two main types of hardware platforms were included in the study: desktop configurations with AMD Ryzen 7000 series processors, and devices based on 13th-generation Intel Core processors, representing laptops and mini PCs. The tested Python versions were: Python 3.14.0, Python 3.13.9, Python 3.12.10, Python 3.11.9, and Python 3.10.11 (all 64-bit builds).
To ensure objective results, each Python version was installed from scratch, without any pre-existing libraries or settings, using the following configuration options:

The first part of the tests was conducted on a desktop computer equipped with an AMD Ryzen 9 7900 processor, DDR5 memory, and an M.2 PCIe Gen4 NVMe drive. The table below presents the results of 111 benchmark tests performed using different Python versions on this device (JS – time unit; the best results for each individual test are highlighted in green).
| Benchmark | TU | Python 3.14 | Python 3.13 | Python 3.12 | Python 3.11 | Python 3.10 |
|---|---|---|---|---|---|---|
| 2to3 | ms | 214 | 213 | 220 | 210 | 244 |
| async_generators | ms | 257 | 250 | 244 | 194 | 233 |
| async_tree_cpu_io_mixed | ms | 363 | 409 | 522 | 578 | 682 |
| async_tree_cpu_io_mixed_tg | ms | 360 | 426 | 517 | 516 | |
| async_tree_eager | ms | 71.79 | 79.59 | 70.63 | ||
| async_tree_eager_cpu_io_mixed | ms | 297 | 305 | 306 | ||
| async_tree_eager_cpu_io_mixed_tg | ms | 332 | 372 | 428 | ||
| async_tree_eager_io | ms | 461 | 652 | 944 | ||
| async_tree_eager_io_tg | ms | 467 | 668 | 995 | ||
| async_tree_eager_memoization | ms | 155 | 182 | 171 | ||
| async_tree_eager_memoization_tg | ms | 202 | 241 | 308 | ||
| async_tree_eager_tg | ms | 152 | 181 | 215 | ||
| async_tree_io | ms | 453 | 576 | 855 | 959 | 1312 |
| async_tree_io_tg | ms | 438 | 597 | 890 | 929 | |
| async_tree_memoization | ms | 227 | 301 | 402 | 418 | 564 |
| async_tree_memoization_tg | ms | 223 | 310 | 379 | 400 | |
| async_tree_none | ms | 192 | 242 | 309 | 374 | 471 |
| async_tree_none_tg | ms | 181 | 220 | 295 | 296 | |
| asyncio_tcp | ms | 493 | 488 | 464 | 666 | 751 |
| asyncio_tcp_ssl | ms | 1307 | 1320 | 1271 | 1888 | 2061 |
| asyncio_websockets | ms | 140 | 457 | 456 | 458 | 457 |
| bench_mp_pool | ms | 98.28 | 93.27 | 98.2 | 87.71 | 87.0 |
| bench_thread_pool | μs | 725 | 692 | 721 | 716 | 763 |
| bpe_tokeniser | ms | 2858 | 2931 | 3050 | 2700 | 2942 |
| chameleon | ms | 9.65 | 10.25 | 8.94 | 8.93 | 10.7 |
| chaos | ms | 42.32 | 41.84 | 43.58 | 45.69 | 59.24 |
| comprehensions | μs | 10.9 | 10.8 | 13.5 | 13.7 | 14.8 |
| connected_components | ms | 358 | 356 | 344 | 401 | |
| coroutines | ms | 16.1 | 15.3 | 15.17 | 16.53 | 18.16 |
| coverage | ms | 51.5 | 48.7 | 28.21 | 37.05 | 35.0 |
| create_gc_cycles | μs | 1041 | 970 | 989 | 886 | 928 |
| crypto_pyaes | ms | 48.56 | 50.06 | 49.7 | 46.97 | 63.79 |
| dask | ms | 714 | 718 | 472 | ||
| deepcopy | μs | 170 | 231 | 217 | 224 | 261 |
| deepcopy_memo | μs | 19.3 | 26.1 | 24.9 | 24.6 | 29.8 |
| deepcopy_reduce | μs | 1.86 | 2.19 | 2.01 | 2.02 | 2.28 |
| deltablue | μs | 2349 | 2330 | 2466 | 2623 | 4314 |
| django_template | ms | 23.95 | 24.08 | 22.59 | 22.36 | 28.56 |
| docutils | ms | 1446 | 1442 | 1438 | 1390 | 1654 |
| dulwich_log | ms | 46.52 | 46.18 | 49.48 | 49.12 | 58.44 |
| fannkuch | ms | 253 | 255 | 245 | 243 | 260 |
| float | ms | 53.54 | 55.44 | 58.5 | 53.3 | 67.65 |
| gc_traversal | μs | 1798 | 1647 | 1678 | 1606 | 1483 |
| generators | ms | 19.92 | 22.27 | 23.57 | 41.18 | 41.94 |
| genshi_text | ms | 15.58 | 16.75 | 15.25 | 16.37 | 18.99 |
| genshi_xml | ms | 34.67 | 36.37 | 33.81 | 37.11 | 41.23 |
| go | ms | 82.93 | 98.0 | 89.13 | 93.43 | 134 |
| hexiom | μs | 4574 | 4423 | 4379 | 4273 | 5497 |
| html5lib | ms | 32.33 | 34.0 | 32.66 | 31.5 | 40.11 |
| json_dumps | μs | 6555 | 6166 | 5822 | 7672 | 8130 |
| json_loads | μs | 14.3 | 14.3 | 14.2 | 12.9 | 14.0 |
| k_core | ms | 1598 | 1666 | 1859 | 2110 | |
| logging_format | μs | 6.07 | 6.24 | 6.52 | 6.44 | 6.87 |
| logging_silent | μs | 0.069 | 0.069 | 0.067 | 0.07 | 0.102 |
| logging_simple | μs | 5.66 | 5.76 | 6.12 | 5.97 | 6.48 |
| mako | μs | 7561 | 7040 | 7471 | 7299 | 8974 |
| many_optionals | μs | 636 | 367 | 371 | 363 | 404 |
| mdp | ms | 806 | 1610 | 1627 | 1636 | 1656 |
| meteor_contest | ms | 66.3 | 66.73 | 64.24 | 65.59 | 65.33 |
| nbody | ms | 83.73 | 85.28 | 81.67 | 73.06 | 82.72 |
| nqueens | ms | 61.37 | 59.21 | 59.94 | 60.22 | 62.37 |
| pathlib | ms | 230 | 227 | 229 | 215 | 216 |
| pickle | μs | 8.03 | 7.65 | 7.47 | 6.72 | 6.95 |
| pickle_dict | μs | 20.5 | 19.2 | 19.7 | 18.8 | 19.2 |
| pickle_list | μs | 3.02 | 2.82 | 2.88 | 2.65 | 2.62 |
| pickle_pure_python | μs | 208 | 193 | 194 | 193 | 260 |
| pidigits | ms | 130 | 133 | 135 | 136 | 137 |
| pprint_pformat | ms | 990 | 1033 | 989 | 971 | 1184 |
| pprint_safe_repr | ms | 484 | 507 | 482 | 471 | 573 |
| pyflate | ms | 311 | 309 | 312 | 288 | 396 |
| python_startup | ms | 33.02 | 32.41 | 32.79 | 30.72 | 31.73 |
| python_startup_no_site | ms | 32.77 | 33.77 | 34.8 | 33.93 | 34.62 |
| raytrace | ms | 187 | 184 | 195 | 199 | 275 |
| regex_compile | ms | 71.26 | 76.41 | 79.09 | 75.86 | 91.16 |
| regex_dna | ms | 109 | 111 | 100 | 103 | 110 |
| regex_effbot | μs | 1594 | 1718 | 1526 | 1705 | 1806 |
| regex_v8 | ms | 14.72 | 15.42 | 13.85 | 14.12 | 15.46 |
| richards | ms | 30.26 | 31.41 | 28.18 | 30.75 | 43.44 |
| richards_super | ms | 33.92 | 35.06 | 31.89 | 37.87 | 52.98 |
| scimark_fft | ms | 208 | 211 | 214 | 212 | 223 |
| scimark_lu | ms | 71.85 | 71.51 | 72.29 | 67.29 | 94.88 |
| scimark_monte_carlo | ms | 47.42 | 47.65 | 46.3 | 44.49 | 59.67 |
| scimark_sor | ms | 87.64 | 87.03 | 88.96 | 78.85 | 107 |
| scimark_sparse_mat_mult | μs | 3402 | 3179 | 3335 | 3247 | 3568 |
| shortest_path | ms | 369 | 364 | 355 | 407 | |
| spectral_norm | ms | 72.52 | 77.34 | 74.44 | 73.85 | 83.36 |
| sphinx | ms | 582 | 595 | 610 | 625 | |
| sqlalchemy_declarative | ms | 60.46 | 64.8 | 67.55 | 68.82 | 77.67 |
| sqlalchemy_imperative | μs | 6717 | 7188 | 7047 | 6966 | 8618 |
| sqlglot_v2_normalize | ms | 67.45 | 70.95 | 67.49 | 68.99 | 79.56 |
| sqlglot_v2_optimize | ms | 32.12 | 33.7 | 32.72 | 32.44 | 37.23 |
| sqlglot_v2_parse | μs | 833 | 819 | 846 | 884 | 1139 |
| sqlglot_v2_transpile | μs | 1008 | 1006 | 1030 | 1063 | 1349 |
| sqlite_synth | μs | 1.47 | 1.53 | 1.53 | 1.36 | 1.53 |
| subparsers | ms | 46.02 | 18.28 | 45.45 | 40.11 | 45.82 |
| sympy_expand | ms | 249 | 253 | 242 | 247 | 270 |
| sympy_integrate | ms | 11.06 | 11.62 | 11.44 | 11.59 | 12.75 |
| sympy_str | ms | 146 | 150 | 150 | 151 | 164 |
| sympy_sum | ms | 75.75 | 79.31 | 81.49 | 84.4 | 91.92 |
| telco | μs | 4712 | 4797 | 4450 | 3925 | 3844 |
| tomli_loads | ms | 1498 | 1497 | 1521 | 1418 | 1702 |
| tornado_http | ms | 97.62 | 101 | 102 | 102 | 117 |
| typing_runtime_protocols | μs | 103 | 107 | 101 | 297 | 314 |
| unpack_sequence | μs | 0.046 | 0.045 | 0.05 | 0.037 | 0.047 |
| unpickle | μs | 9.03 | 9.21 | 9.02 | 7.81 | 8.57 |
| unpickle_list | μs | 2.89 | 2.63 | 3.11 | 2.53 | 2.98 |
| unpickle_pure_python | μs | 151 | 148 | 146 | 148 | 178 |
| xml_etree_generate | ms | 58.13 | 59.15 | 59.31 | 52.36 | 58.35 |
| xml_etree_iterparse | ms | 54.59 | 55.84 | 57.21 | 56.51 | 57.17 |
| xml_etree_parse | ms | 72.94 | 77.09 | 77.18 | 81.18 | 81.96 |
| xml_etree_process | ms | 40.8 | 41.25 | 40.8 | 37.97 | 45.27 |
The second part of the tests was carried out on a mini PC equipped with an Intel Core i3-1315U processor (also commonly used in laptops), DDR4 memory, and an M.2 PCIe Gen4 NVMe drive. The table below shows the results of 110 benchmark tests performed using different Python versions on this device (TU – time unit; the best results for each individual test are highlighted in green).
| Benchmark | TU | Python 3.14 | Python 3.13 | Python 3.12 | Python 3.11 | Python 3.10 |
|---|---|---|---|---|---|---|
| 2to3 | ms | 270 | 267 | 260 | 257 | 293 |
| async_generators | ms | 262 | 247 | 253 | 194 | 253 |
| async_tree_cpu_io_mixed | ms | 376 | 442 | 567 | 691 | 705 |
| async_tree_cpu_io_mixed_tg | ms | 373 | 451 | 573 | 600 | |
| async_tree_eager | ms | 81.44 | 91.51 | 79.77 | ||
| async_tree_eager_cpu_io_mixed | ms | 352 | 348 | 360 | ||
| async_tree_eager_cpu_io_mixed_tg | ms | 363 | 401 | 486 | ||
| async_tree_eager_io | ms | 462 | 610 | 813 | ||
| async_tree_eager_io_tg | ms | 454 | 600 | 819 | ||
| async_tree_eager_memoization | ms | 174 | 212 | 205 | ||
| async_tree_eager_memoization_tg | ms | 228 | 256 | 349 | ||
| async_tree_eager_tg | ms | 185 | 195 | 241 | ||
| async_tree_io | ms | 448 | 580 | 808 | 904 | 1146 |
| async_tree_io_tg | ms | 452 | 579 | 817 | 880 | |
| async_tree_memoization | ms | 253 | 321 | 432 | 476 | 581 |
| async_tree_memoization_tg | ms | 246 | 323 | 404 | 448 | |
| async_tree_none | ms | 201 | 262 | 342 | 445 | 476 |
| async_tree_none_tg | ms | 203 | 233 | 330 | 346 | |
| asyncio_tcp | ms | 603 | 566 | 588 | 788 | 890 |
| asyncio_tcp_ssl | ms | 1616 | 1588 | 1639 | 2881 | 2890 |
| asyncio_websockets | ms | 184 | 356 | 359 | 379 | 364 |
| bench_mp_pool | ms | 124 | 112 | 121 | 118 | 107 |
| bench_thread_pool | μs | 1183 | 1043 | 1068 | 1209 | 1227 |
| bpe_tokeniser | ms | 5177 | 5132 | 5698 | 5154 | 5585 |
| chameleon | ms | 11.3 | 11.46 | 9.81 | 11.38 | 12.32 |
| chaos | ms | 46.7 | 46.74 | 47.61 | 57.35 | 67.86 |
| comprehensions | μs | 12.9 | 12.9 | 15.4 | 17.8 | 18.6 |
| connected_components | ms | 373 | 376 | 346 | 389 | |
| coroutines | ms | 16.19 | 14.95 | 15.42 | 18.08 | 18.07 |
| coverage | ms | 161 | 154 | 30.96 | 41.75 | 33.08 |
| create_gc_cycles | μs | 1750 | 1438 | 1492 | 1351 | 1306 |
| crypto_pyaes | ms | 57.28 | 52.81 | 53.37 | 54.63 | 70.81 |
| dask | ms | 2241 | 2105 | 1010 | ||
| deepcopy | μs | 198 | 270 | 252 | 273 | 297 |
| deepcopy_memo | μs | 20.5 | 28.5 | 26.5 | 30.3 | 32.4 |
| deepcopy_reduce | μs | 2.12 | 2.5 | 2.26 | 2.57 | 2.52 |
| deltablue | μs | 2408 | 2323 | 2290 | 3185 | 4649 |
| django_template | ms | 27.55 | 27.14 | 24.87 | 31.1 | 33.28 |
| docutils | ms | 1906 | 1812 | 1810 | 1998 | 2416 |
| fannkuch | ms | 283 | 296 | 272 | 326 | 311 |
| float | ms | 55.03 | 58.99 | 59.25 | 65.3 | 68.68 |
| gc_traversal | μs | 3107 | 2670 | 2678 | 2520 | 2234 |
| generators | ms | 23.72 | 23.19 | 22.51 | 38.68 | 35.96 |
| genshi_text | ms | 18.09 | 18.19 | 16.39 | 20.33 | 21.97 |
| genshi_xml | ms | 40.07 | 40.3 | 36.33 | 46.53 | 45.24 |
| go | ms | 91.76 | 106 | 95.02 | 120 | 155 |
| hexiom | μs | 4790 | 4690 | 4456 | 5253 | 6165 |
| html5lib | ms | 44.18 | 47.6 | 43.86 | 47.39 | 56.63 |
| json_dumps | μs | 7253 | 7070 | 6797 | 9295 | 9358 |
| json_loads | μs | 16.8 | 16.8 | 17.2 | 17.7 | 16.1 |
| k_core | ms | 3036 | 3092 | 3278 | 4010 | |
| logging_format | μs | 7.36 | 7.0 | 7.15 | 8.3 | 8.07 |
| logging_silent | μs | 0.068 | 0.07 | 0.065 | 0.085 | 0.107 |
| logging_simple | μs | 6.51 | 6.47 | 6.6 | 7.5 | 7.58 |
| mako | μs | 7445 | 7232 | 7340 | 8088 | 9625 |
| many_optionals | μs | 1009 | 612 | 638 | 615 | 690 |
| mdp | ms | 972 | 1725 | 1550 | 2108 | 1922 |
| meteor_contest | ms | 86.77 | 86.67 | 84.01 | 85.62 | 84.9 |
| nbody | ms | 81.58 | 81.58 | 78.3 | 81.58 | 79.14 |
| nqueens | ms | 71.84 | 68.81 | 66.93 | 73.6 | 76.85 |
| pathlib | ms | 87.59 | 89.06 | 84.07 | 76.32 | 74.25 |
| pickle | μs | 9.43 | 9.35 | 8.66 | 8.15 | 8.64 |
| pickle_dict | μs | 23.5 | 24.2 | 21.5 | 23.3 | 21.4 |
| pickle_list | μs | 4.15 | 3.68 | 3.29 | 3.37 | 3.41 |
| pickle_pure_python | μs | 251 | 222 | 220 | 251 | 311 |
| pidigits | ms | 172 | 168 | 168 | 168 | 167 |
| pprint_pformat | ms | 1156 | 1206 | 1146 | 1328 | 1397 |
| pprint_safe_repr | ms | 591 | 615 | 563 | 640 | 682 |
| pyflate | ms | 358 | 368 | 343 | 379 | 461 |
| python_startup | ms | 29.36 | 28.76 | 27.6 | 33.83 | 25.44 |
| python_startup_no_site | ms | 22.04 | 21.69 | 21.0 | 22.41 | 20.49 |
| raytrace | ms | 230 | 212 | 212 | 254 | 314 |
| regex_compile | ms | 91.82 | 103 | 96.15 | 114 | 117 |
| regex_dna | ms | 141 | 149 | 130 | 137 | 147 |
| regex_effbot | μs | 1903 | 1767 | 1655 | 1817 | 1859 |
| regex_v8 | ms | 17.47 | 17.05 | 15.38 | 16.79 | 17.24 |
| richards | ms | 32.25 | 34.28 | 28.18 | 37.17 | 44.82 |
| richards_super | ms | 35.45 | 38.53 | 31.95 | 47.73 | 57.58 |
| scimark_fft | ms | 211 | 215 | 205 | 226 | 216 |
| scimark_lu | ms | 64.2 | 74.67 | 66.77 | 77.47 | 93.73 |
| scimark_monte_carlo | ms | 48.13 | 52.98 | 48.27 | 54.87 | 65.04 |
| scimark_sor | ms | 87.8 | 94.79 | 88.79 | 96.92 | 115 |
| scimark_sparse_mat_mult | μs | 3050 | 2820 | 2884 | 3062 | 2957 |
| shortest_path | ms | 415 | 411 | 382 | 425 | |
| spectral_norm | ms | 72.74 | 73.3 | 72.23 | 82.72 | 85.23 |
| sphinx | ms | 756 | 770 | 754 | 886 | |
| sqlalchemy_declarative | ms | 93.21 | 97.23 | 98.18 | 110 | 124 |
| sqlalchemy_imperative | ms | 11.78 | 11.26 | 10.42 | 12.62 | 13.32 |
| sqlglot_v2_normalize | ms | 84.92 | 82.53 | 77.66 | 94.7 | 95.5 |
| sqlglot_v2_optimize | ms | 41.05 | 39.79 | 37.6 | 44.96 | 45.47 |
| sqlglot_v2_parse | μs | 938 | 961 | 925 | 1150 | 1388 |
| sqlglot_v2_transpile | μs | 1189 | 1214 | 1152 | 1369 | 1685 |
| sqlite_synth | μs | 1.95 | 1.92 | 2.0 | 1.96 | 2.16 |
| subparsers | ms | 70.49 | 28.55 | 57.79 | 53.36 | 59.32 |
| sympy_expand | ms | 352 | 340 | 309 | 347 | 368 |
| sympy_integrate | ms | 14.15 | 15.02 | 14.24 | 15.49 | 17.25 |
| sympy_str | ms | 194 | 207 | 191 | 210 | 226 |
| sympy_sum | ms | 100 | 105 | 100 | 116 | 126 |
| telco | μs | 5372 | 5950 | 4830 | 4558 | 4452 |
| tomli_loads | ms | 1547 | 1672 | 1556 | 1576 | 1932 |
| tornado_http | ms | 105 | 107 | 108 | 111 | 139 |
| typing_runtime_protocols | μs | 123 | 131 | 117 | 369 | 382 |
| unpack_sequence | μs | 0.042 | 0.045 | 0.044 | 0.05 | 0.044 |
| unpickle | μs | 9.7 | 10.7 | 9.7 | 8.84 | 9.55 |
| unpickle_list | μs | 3.08 | 3.08 | 3.3 | 2.92 | 3.3 |
| unpickle_pure_python | μs | 153 | 159 | 147 | 173 | 201 |
| xml_etree_generate | ms | 64.28 | 66.97 | 65.02 | 60.18 | 63.12 |
| xml_etree_iterparse | ms | 73.86 | 75.22 | 73.92 | 76.54 | 80.54 |
| xml_etree_parse | ms | 102 | 113 | 108 | 115 | 121 |
| xml_etree_process | ms | 44.46 | 47.58 | 43.16 | 42.62 | 51.4 |
The video below presents relative performance results in the form of charts for individual groups of tests. The execution times obtained with Python version 3.14 were used as the reference point (100%).
More information can be found on the website: python.lewoniewski.info
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Python 3.14.3 and 3.13.12 | 0 | 21.73 | 08-02-2026 |
| 2 | Reverting the incremental GC in Python 3.14 and 3.15 - Core Development | 0 | 17.12 | 21-04-2026 |
| 3 | Django: fixing a memory “leak” from Python 3.14’s incremental garbage collection | 0 | 10 | 22-04-2026 |
| 4 | From Python 3.3 to today: ending 15 years of subprocess polling | 0 | 28.18 | 01-02-2026 |
| 5 | Почему новый сборщик мусора откатили в Python 3.14.5 | 0 | 10.01 | 09-08-2026 |
| 6 | В Python есть switch/case начиная с версии 3.10+ | 0 | 11.3 | 29-12-2025 |
| 7 | Free-threaded Python: past, present, and future | 0 | 26.67 | 27-06-2026 |
| 8 | Python 3.15’s JIT is now back on track | 0 | 10 | 21-03-2026 |
| 9 | Python 3.6-3.14 Performance | 0 | 8.08 | 10-01-2026 |
| 10 | Explicit Lazy Imports Are Coming to Python 3.15 | 0 | 22.5 | 27-06-2026 |