Насколько изменилась производительность Python от версии 3.6 до 3.15? Сравнение десяти версий Python по результатам 122 тестов показывает, что во многих задачах время выполнения существенно сократилось. При этом в некоторых тестах наименьшее среднее время демонстрируют более ранние версии. Эти результаты помогут студентам, исследователям и разработчикам понять, как производительность Python зависит от характера выполняемой задачи.
Тестовая система и версии Python
В тестах использовался настольный компьютер с процессором AMD Ryzen 9 7900, оперативной памятью DDR5 и SSD-накопителем M.2 PCIe Gen4 NVMe. Все тестируемые интерпретаторы представляли собой 64-разрядные сборки Python под управлением Windows 11.
| Компонент | Конфигурация |
|---|---|
| Процессор | AMD Ryzen 9 7900 |
| Оперативная память | DDR5 RAM |
| Накопитель | M.2 PCIe Gen4 NVMe drive |
| Операционная система | Windows 11 |
| Разрядность интерпретатора | 64-разрядные сборки Python |
| Количество тестов | 122 (67 проведены для всех версий) |
| Версия Python | Протестированная сборка | Версия pyperformance |
|---|---|---|
| Python 3.15 | 3.15.0 | 1.14.0 |
| Python 3.14 | 3.14.8 | 1.14.0 |
| Python 3.13 | 3.13.16 | 1.14.0 |
| Python 3.12 | 3.12.10 | 1.14.0 |
| Python 3.11 | 3.11.9 | 1.14.0 |
| Python 3.10 | 3.10.11 | 1.14.0 |
| Python 3.9 | 3.9.13 | 1.11.0 |
| Python 3.8 | 3.8.10 | 1.11.0 |
| Python 3.7 | 3.7.9 | 1.0.6 |
| Python 3.6 | 3.6.8 | 1.0.6 |
Примечание о сопоставимости результатов: в файлах с результатами использовались три версии набора тестов pyperformance: 1.0.6, 1.11.0 и 1.14.0. Применять разные версии набора тестов пришлось из-за проблем совместимости и ошибок, возникавших при запуске новых версий pyperformance на старых интерпретаторах Python. Там, где это было необходимо, тесты проводились с помощью более ранних версий набора. Совпадение названий тестов не означает, что их реализация и зависимости оставались неизменными. Поэтому различия в результатах нельзя объяснять исключительно изменениями самого интерпретатора Python.
Что изменилось в каждой версии Python?
Ниже перечислены некоторые нововведения в выпусках Python от 3.15 до 3.6. Этот обзор даёт исторический контекст, но само наличие указанных возможностей не означает, что они были включены во время тестирования или повлияли на его результаты.
- Python 3.15: Добавлены явные ленивые импорты, распаковка элементов в генераторах коллекций и новый пакет профилирования, в состав которого входит статистический профилировщик Tachyon.
- Python 3.14: Добавлены шаблонные строковые литералы (t-строки), отложенное вычисление аннотаций и поддержка нескольких интерпретаторов в стандартной библиотеке.
- Python 3.13: Представлены обновлённый интерактивный интерпретатор, экспериментальная сборка без глобальной блокировки интерпретатора (free-threaded) и экспериментальный JIT-компилятор.
- Python 3.12: Добавлены синтаксис параметров типов, более гибкие f-строки и поддержка отдельной глобальной блокировки интерпретатора (GIL) в каждом субинтерпретаторе.
- Python 3.11: Реализованы адаптивная специализация в CPython, группы исключений и конструкция except*, а также asyncio.TaskGroup для управления связанными асинхронными задачами.
- Python 3.10: Добавлены структурное сопоставление с образцом с помощью match и case, запись объединений типов в виде X | Y и более понятные сообщения об ошибках.
- Python 3.9: Добавлены операторы объединения словарей, аннотации типов со встроенными коллекциями, например list[int], а также модуль zoneinfo для часовых поясов базы IANA.
- Python 3.8: Добавлены выражения присваивания с оператором «морж» (:=), только позиционные параметры и поддержка общей памяти в модуле multiprocessing.
- Python 3.7: Добавлены классы данных (dataclasses), контекстные переменные для управления состоянием в контексте выполнения и встроенная функция breakpoint().
- Python 3.6: Добавлены форматируемые строковые литералы (f-строки), аннотации переменных и асинхронные генераторы.
Как рассчитывались результаты тестов производительности
Для анализа использовались отдельные измерения из JSON-файлов pyperf. Результаты калибровки и предварительных прогонов исключены. Для каждого теста и каждой версии Python рассчитывалось среднее арифметическое измеренных значений. Время в исходных файлах уже нормализовано по одной итерации тестового цикла.
В сравнение включены только тесты, для которых имеется результат Python 3.15. Поэтому исключены шесть тестов: genshi_text, genshi_xml, sqlglot_normalize, sqlglot_optimize, sqlglot_parse и sqlglot_transpile. Отсутствующие результаты обозначены прочерком; они не считаются ни нулевыми значениями, ни проваленными тестами.
В таблицах синим цветом и полужирным шрифтом выделены значения со знаком ★ — наименьшие средние значения в строке до округления. Чем меньше время выполнения, тем лучше результат. Единица измерения указана для каждого теста: мс — миллисекунды, мкс — микросекунды. Для удобства чтения значения округлены до четырёх значащих цифр. Выделение отражает наблюдаемые средние значения.
Python 3.6–3.15: результаты отдельных тестов
В таблице 3 представлены отдельные тесты, выполненные на всех десяти версиях Python; столбцы расположены от версии 3.15 до 3.6. Здесь есть как примеры ускорения, так и задачи, в которых Python 3.15 не показал лучшего результата. Ниже приведена полная таблица из 122 тестов, позволяющая проверить приведённые примеры по всему набору данных. Широкие таблицы можно прокручивать по горизонтали.
| Тест | Ед. изм. | Python 3.15 | Python 3.14 | Python 3.13 | Python 3.12 | Python 3.11 | Python 3.10 | Python 3.9 | Python 3.8 | Python 3.7 | Python 3.6 |
|---|---|---|---|---|---|---|---|---|---|---|---|
async_tree_io |
мс | 558,8 ★ | 617,5 | 577,6 | 864,9 | 964,0 | 1321 | 1342 | 1353 | 1340 | 1419 |
deltablue |
мс | 1,669 ★ | 2,508 | 2,249 | 2,401 | 2,576 | 4,298 | 4,004 | 4,060 | 4,441 | 5,260 |
dulwich_log |
мс | 44,74 ★ | 48,84 | 47,16 | 50,01 | 49,22 | 58,85 | 59,76 | 58,69 | 64,96 | 65,13 |
fannkuch |
мс | 208,5 ★ | 280,5 | 251,0 | 243,7 | 237,4 | 259,9 | 254,6 | 264,9 | 300,1 | 304,3 |
json_dumps |
мс | 4,862 ★ | 6,731 | 6,180 | 5,920 | 7,629 | 8,065 | 8,268 | 8,332 | 8,793 | 9,014 |
json_loads |
мкс | 13,06 | 14,53 | 14,62 | 14,33 | 12,79 ★ | 13,34 | 13,98 | 15,08 | 16,56 | 17,48 |
nbody |
мс | 62,13 ★ | 89,91 | 81,61 | 81,79 | 72,83 | 89,64 | 83,77 | 77,54 | 97,39 | 96,01 |
richards |
мс | 22,75 ★ | 31,37 | 30,20 | 27,37 | 29,19 | 41,73 | 38,45 | 39,53 | 42,26 | 50,17 |
spectral_norm |
мс | 52,58 ★ | 77,96 | 74,42 | 75,18 | 73,23 | 81,42 | 80,50 | 80,31 | 99,75 | 97,18 |
regex_dna |
мс | 118,7 | 107,9 | 105,8 | 99,72 ★ | 101,0 | 110,0 | 107,5 | 113,7 | 122,7 | 121,4 |
python_startup |
мс | 34,36 | 35,18 | 24,99 | 33,05 | 36,57 | 24,15 | 33,62 | 24,13 | 26,80 | 23,04 ★ |
python_startup_no_site |
мс | 29,23 | 29,09 | 19,93 | 27,34 | 26,76 | 19,83 | 28,93 | 19,81 | 23,32 | 18,62 ★ |
Среднее время в тесте async_tree_io сократилось с 1418,8 мс в Python 3.6 до 558,8 мс в Python 3.15 — на 60,6%. Для json_dumps сокращение времени за тот же период составило 46,1%. Эти результаты относятся к конкретным задачам и не означают, что любое приложение на Python будет работать настолько же быстрее.
Не менее показательны и исключения. Минимальное среднее время в тесте json_loads зафиксировано у Python 3.11, а в regex_dna лидирует Python 3.12. В условиях использованных здесь тестовых виртуальных окружений Python 3.6 показал минимальное среднее время запуска, однако это не доказывает, что инициализация его интерпретатора сама по себе быстрее. Для небольших консольных программ, которые быстро завершают работу, время запуска может быть важнее скорости длительных вычислений. Поэтому единая характеристика вроде «самая быстрая версия Python» скрывает существенные различия.
Как интерпретировать результаты теста времени запуска Python
Тесты запуска измеряют время, необходимое для старта Python, выполнения пустой команды и завершения процесса. Во втором тесте, python_startup_no_site, пропускается обычный этап инициализации при запуске, который подготавливает возможность использования установленных пакетов. Время запуска особенно важно для небольших скриптов, которые часто запускаются и быстро завершаются.
В этих измерениях Python 3.6 запускается быстрее остальных версий, однако значение имеет и способ запуска. Тесты проводились в виртуальных окружениях — отдельных конфигурациях Python, созданных специально для проверки. В Windows новые версии могут использовать дополнительный исполняемый файл-посредник для запуска Python из такого окружения. Это может увеличивать измеренное время. В официальной документации Python описано это изменение, появившееся в Python 3.7.2.
Команды запуска Python не менялись между тремя использованными версиями pyperformance (1.0.6, 1.11.0 и 1.14.0). Однако при измерениях применялись разные версии библиотеки pyperf, которая запускает процессы и измеряет время их выполнения: соответственно 2.5.0, 2.6.3 и 2.10.0. Таким образом, выполняемая задача оставалась одинаковой, но условия измерений в целом не были идентичными.
Тесты кодирования в Python 3.10-3.15
Для тестов кодирования, приведённых ниже, отсутствуют результаты Python 3.6–3.9, поэтому в таблице 4 сравниваются только версии 3.10–3.15. Для всех шести версий использовался pyperformance 1.14.0. Таким образом, в этой таблице нет различий, связанных с версиями набора тестов.
| Тест | Ед. изм. | Python 3.15 | Python 3.14 | Python 3.13 | Python 3.12 | Python 3.11 | Python 3.10 |
|---|---|---|---|---|---|---|---|
ascii85_large |
мс | 11,62 ★ | 797,9 | 709,0 | 772,3 | 643,8 | 759,2 |
ascii85_small |
мс | 0,3875 ★ | 14,88 | 13,20 | 13,79 | 12,18 | 14,18 |
base16_large |
мс | 5,767 | 4,714 ★ | 22,52 | 23,08 | 23,89 | 23,71 |
base32_large |
мс | 2,431 ★ | 327,6 | 300,7 | 296,4 | 265,7 | 292,1 |
base32_small |
мс | 0,1630 ★ | 6,227 | 5,802 | 5,594 | 5,134 | 5,641 |
base64_large |
мс | 1,852 ★ | 6,746 | 6,187 | 6,095 | 6,116 | 6,071 |
base85_large |
мс | 4,293 ★ | 272,4 | 252,9 | 258,8 | 230,1 | 259,2 |
base85_small |
мс | 0,1505 ★ | 4,864 | 4,484 | 4,529 | 4,198 | 4,712 |
Некоторые различия в результатах особенно велики. Например, в тесте base32_large среднее время составляет 327,6 мс в Python 3.14 и 2,431 мс в Python 3.15. Прежде чем делать выводы о причинах столь заметного расхождения, необходимо отдельно проверить реализацию теста и среду выполнения. В то же время Python 3.14 показывает наименьшее среднее время в тесте base16_large: новейшая версия лидирует не во всех задачах кодирования.
Анимированные диаграммы
В анимированном видео тесты показываются по одному. Длина полосы рассчитывается по формуле 100 × среднее время версии ÷ наибольшее среднее время в данном тесте. Таким образом, самому медленному результату соответствует 100%. Например, значение 60% означает, что выполнение заняло на 40% меньше времени, чем у самого медленного результата. Это не означает ускорение на 60%.
Посмотрите полную версию видео:
Бирюзовым цветом обозначены более быстрые результаты внутри одного теста, янтарным — промежуточные, красным — более медленные. Рядом с полосами указано фактическое время выполнения. Для каждого теста используется собственная шкала, поэтому длины полос следует сравнивать только в пределах одной диаграммы.
AMD и Intel: меняется ли характер прироста производительности Python?
Опубликованные результаты измерений на процессорах AMD и Intel позволяют предположить, что при общем сравнении версий Python выбор процессора не обязательно существенно меняет характер различий в производительности. В сравнении Python 3.14 и 3.15 за 2026 год приведён похожий среднегеометрический коэффициент ускорения на двух системах: настольном компьютере с AMD Ryzen 9 7900 и мини-ПК с Intel Core i3-1315U. Он характеризует относительное ускорение при переходе с Python 3.14 на 3.15 на каждом компьютере. После округления значения совпадают, но наборы тестов различаются: 122 на AMD и 118 на Intel.
В сравнении Python 3.10–3.14 за 2025 год также наблюдаются похожие тенденции для ряда задач на обеих платформах. Например, при переходе с Python 3.13 на 3.14 время теста async_tree_io на AMD снижается с 576 до 453 мс, а на Intel — с 580 до 448 мс, то есть примерно на 21% и 23% соответственно.
В совокупности эти примеры указывают на сходные тенденции относительной производительности на протестированных системах. При этом абсолютное время выполнения и порядок версий по скорости в отдельных тестах могут различаться. Системы также отличаются конфигурацией памяти и форм-фактором, поэтому такое сравнение не позволяет выделить влияние исключительно марки процессора или доказать статистическую эквивалентность AMD и Intel. Если важна точная производительность конкретного приложения, необходимы испытания на целевом оборудовании.
Полное сравнение: все 122 теста
Раскрывающаяся таблица содержит все 122 выбранных теста и результаты для десяти версий Python. Звёздочка обозначает наименьшее зафиксированное среднее значение среди имеющихся результатов в строке. Во всей таблице действуют те же правила расчёта, обозначения отсутствующих данных и округления.
Показать результаты всех 122 тестов
| Тест | Ед. изм. | Python 3.15 | Python 3.14 | Python 3.13 | Python 3.12 | Python 3.11 | Python 3.10 | Python 3.9 | Python 3.8 | Python 3.7 | Python 3.6 |
|---|---|---|---|---|---|---|---|---|---|---|---|
2to3 |
мс | 207,6 | 229,3 | 205,0 ★ | 223,0 | 212,4 | 243,5 | 244,1 | 233,3 | 239,4 | 245,8 |
ascii85_large |
мс | 11,62 ★ | 797,9 | 709,0 | 772,3 | 643,8 | 759,2 | — | — | — | — |
ascii85_small |
мс | 0,3875 ★ | 14,88 | 13,20 | 13,79 | 12,18 | 14,18 | — | — | — | — |
async_generators |
мс | 237,9 | 269,8 | 245,9 | 246,6 | 194,2 ★ | 233,8 | 222,7 | 225,1 | 239,1 | — |
async_tree_cpu_io_mixed |
мс | 393,4 ★ | 420,2 | 408,3 | 520,8 | 564,7 | 688,5 | 686,8 | 687,6 | 684,0 | 736,0 |
async_tree_cpu_io_mixed_tg |
мс | 380,8 ★ | 404,4 | 424,8 | 517,1 | 518,0 | — | — | — | — | — |
async_tree_eager |
мс | 98,19 | 124,2 | 77,12 | 70,41 ★ | — | — | — | — | — | — |
async_tree_eager_cpu_io_mixed |
мс | 322,5 | 349,0 | 305,3 | 304,9 ★ | — | — | — | — | — | — |
async_tree_eager_cpu_io_mixed_tg |
мс | 342,9 ★ | 365,3 | 374,0 | 430,9 | — | — | — | — | — | — |
async_tree_eager_io |
мс | 588,9 ★ | 652,8 | 656,7 | 1007 | — | — | — | — | — | — |
async_tree_eager_io_tg |
мс | 558,3 ★ | 610,1 | 658,6 | 922,1 | — | — | — | — | — | — |
async_tree_eager_memoization |
мс | 170,7 | 190,5 | 179,3 | 170,2 ★ | — | — | — | — | — | — |
async_tree_eager_memoization_tg |
мс | 224,0 ★ | 243,9 | 239,1 | 312,0 | — | — | — | — | — | — |
async_tree_eager_tg |
мс | 166,3 ★ | 184,9 | 181,0 | 222,9 | — | — | — | — | — | — |
async_tree_io |
мс | 558,8 ★ | 617,5 | 577,6 | 864,9 | 964,0 | 1321 | 1342 | 1353 | 1340 | 1419 |
async_tree_io_tg |
мс | 511,6 ★ | 581,5 | 594,1 | 897,2 | 938,2 | — | — | — | — | — |
async_tree_memoization |
мс | 278,0 ★ | 308,5 | 298,0 | 414,1 | 434,5 | 576,2 | 571,4 | 557,1 | 566,9 | 629,2 |
async_tree_memoization_tg |
мс | 240,1 ★ | 267,1 | 308,4 | 383,2 | 403,2 | — | — | — | — | — |
async_tree_none |
мс | 225,8 ★ | 248,5 | 244,0 | 312,6 | 380,6 | 474,1 | 485,7 | 461,8 | 471,4 | 554,3 |
async_tree_none_tg |
мс | 194,4 ★ | 215,4 | 220,6 | 293,5 | 306,4 | — | — | — | — | — |
asyncio_tcp |
мс | 435,2 ★ | 458,4 | 441,2 | 459,3 | 604,9 | 754,9 | 618,0 | 671,8 | — | — |
asyncio_tcp_ssl |
мс | 1219 ★ | 1258 | 1251 | 1253 | 1317 | 2033 | 1754 | 1843 | — | — |
asyncio_websockets |
мс | 125,6 ★ | 141,6 | 452,9 | 456,7 | 455,5 | 458,1 | — | — | — | — |
base16_large |
мс | 5,767 | 4,714 ★ | 22,52 | 23,08 | 23,89 | 23,71 | — | — | — | — |
base16_small |
мкс | 308,3 | 252,3 ★ | 522,2 | 515,2 | 552,0 | 605,3 | — | — | — | — |
base32_large |
мс | 2,431 ★ | 327,6 | 300,7 | 296,4 | 265,7 | 292,1 | — | — | — | — |
base32_small |
мс | 0,1630 ★ | 6,227 | 5,802 | 5,594 | 5,134 | 5,641 | — | — | — | — |
base64_large |
мс | 1,852 ★ | 6,746 | 6,187 | 6,095 | 6,116 | 6,071 | — | — | — | — |
base64_small |
мкс | 169,2 ★ | 219,5 | 204,4 | 197,2 | 200,7 | 245,4 | — | — | — | — |
base85_large |
мс | 4,293 ★ | 272,4 | 252,9 | 258,8 | 230,1 | 259,2 | — | — | — | — |
base85_small |
мс | 0,1505 ★ | 4,864 | 4,484 | 4,529 | 4,198 | 4,712 | — | — | — | — |
bench_mp_pool |
мс | 112,0 | 126,0 | 118,1 | 123,2 | 98,84 | 98,60 | 70,91 | 68,98 ★ | 109,8 | 110,6 |
bench_thread_pool |
мс | 0,6588 ★ | 0,7389 | 0,6954 | 0,7138 | 0,7202 | 0,7721 | 0,7480 | 0,7616 | 109,5 | 109,8 |
bpe_tokeniser |
мс | 2318 ★ | 2968 | 2872 | 3112 | 2710 | 2962 | — | — | — | — |
chameleon |
мс | 8,428 | 9,954 | 9,834 | 8,770 | 8,890 | 10,32 | — | 6,593 ★ | 6,986 | 7,623 |
chaos |
мс | 31,30 ★ | 44,06 | 40,48 | 43,34 | 44,41 | 58,37 | 57,75 | 59,67 | 70,34 | 76,81 |
comprehensions |
мкс | 8,117 ★ | 12,20 | 10,70 | 13,28 | 13,41 | 14,73 | 13,95 | 14,30 | — | — |
connected_components |
мс | 365,8 | 388,3 | 359,4 | 351,3 ★ | 406,9 | — | — | — | — | — |
coroutines |
мс | 12,87 ★ | 17,05 | 14,40 | 15,38 | 16,31 | 17,75 | 21,04 | 22,33 | 22,47 | 20,61 |
coverage |
мс | 48,64 | 52,53 | 48,59 | 27,71 | 37,07 | 34,36 | 25,66 | 25,78 | 24,54 ★ | — |
create_gc_cycles |
мс | 0,8892 | 1,030 | 1,005 | 1,004 | 0,9392 | 0,9490 | 0,6352 | 0,6044 ★ | — | — |
crypto_pyaes |
мс | 39,17 ★ | 50,48 | 48,82 | 48,91 | 45,69 | 64,55 | 61,67 | 65,92 | 71,65 | 75,32 |
dask |
мс | 687,5 | 720,2 | 732,9 | 472,2 | — | — | 274,7 | 273,4 ★ | — | — |
deepcopy |
мкс | 129,9 ★ | 174,8 | 223,6 | 218,3 | 219,5 | 256,3 | 245,7 | 250,0 | 298,9 | — |
deepcopy_memo |
мкс | 14,64 ★ | 19,74 | 25,02 | 24,80 | 24,81 | 29,56 | 28,56 | 28,79 | 35,50 | — |
deepcopy_reduce |
мкс | 1,541 ★ | 1,899 | 2,122 | 1,976 | 1,949 | 2,246 | 2,219 | 2,244 | 2,729 | — |
deltablue |
мс | 1,669 ★ | 2,508 | 2,249 | 2,401 | 2,576 | 4,298 | 4,004 | 4,060 | 4,441 | 5,260 |
django_template |
мс | 20,47 ★ | 24,56 | 22,44 | 22,51 | 21,89 | 28,25 | — | — | 35,62 | 45,57 |
docutils |
мс | 1272 ★ | 1425 | 1418 | 1453 | 1416 | 1654 | 1598 | 1569 | 1709 | 1795 |
dulwich_log |
мс | 44,74 ★ | 48,84 | 47,16 | 50,01 | 49,22 | 58,85 | 59,76 | 58,69 | 64,96 | 65,13 |
fannkuch |
мс | 208,5 ★ | 280,5 | 251,0 | 243,7 | 237,4 | 259,9 | 254,6 | 264,9 | 300,1 | 304,3 |
fastapi_http |
мс | 399,9 ★ | 454,7 | 431,1 | 480,7 | 456,6 | 517,2 | — | — | — | — |
float |
мс | 44,02 ★ | 57,28 | 55,06 | 58,57 | 52,96 | 66,99 | 67,17 | 66,56 | 81,47 | 81,81 |
gc_traversal |
мс | 1,682 | 1,807 | 1,802 | 1,711 | 1,635 | 1,516 | 1,211 ★ | 1,373 | — | — |
generators |
мс | 16,29 ★ | 23,32 | 21,48 | 23,35 | 39,08 | 42,54 | 32,71 | 34,39 | 32,56 | — |
go |
мс | 59,34 ★ | 89,44 | 89,62 | 88,20 | 92,64 | 132,0 | 141,1 | 139,6 | 144,5 | 171,1 |
hexiom |
мс | 3,178 ★ | 4,914 | 4,250 | 4,447 | 4,162 | 5,431 | 5,223 | 5,411 | 5,979 | 6,971 |
html5lib |
мс | 28,44 ★ | 33,73 | 33,51 | 32,67 | 31,41 | 39,83 | 41,80 | 41,45 | 46,72 | 53,20 |
json_dumps |
мс | 4,862 ★ | 6,731 | 6,180 | 5,920 | 7,629 | 8,065 | 8,268 | 8,332 | 8,793 | 9,014 |
json_loads |
мкс | 13,06 | 14,53 | 14,62 | 14,33 | 12,79 ★ | 13,34 | 13,98 | 15,08 | 16,56 | 17,48 |
k_core |
мс | 1616 ★ | 1708 | 1670 | 1902 | 2137 | — | — | — | — | — |
logging_format |
мкс | 5,081 ★ | 6,286 | 6,031 | 6,376 | 6,290 | 6,900 | 6,231 | 6,361 | 7,385 | 8,474 |
logging_silent |
мкс | 0,05126 ★ | 0,07505 | 0,07002 | 0,06615 | 0,06868 | 0,1033 | 0,1055 | 0,1041 | 0,1075 | 0,2096 |
logging_simple |
мкс | 4,720 ★ | 5,845 | 5,587 | 5,986 | 5,923 | 6,560 | 5,818 | 5,968 | 6,794 | 7,618 |
mako |
мс | 6,643 ★ | 7,970 | 6,737 | 7,294 | 7,317 | 8,889 | 9,808 | 10,17 | 12,65 | 13,78 |
many_optionals |
мкс | 297,7 ★ | 386,7 | 368,9 | 367,0 | 367,5 | 404,8 | — | — | — | — |
mdp |
мс | 661,3 ★ | 829,3 | 1646 | 1667 | 1565 | 1659 | 1777 | 1642 | 1840 | 1780 |
meteor_contest |
мс | 60,92 ★ | 69,78 | 66,52 | 64,18 | 64,78 | 65,08 | 62,60 | 64,01 | 69,52 | 72,23 |
nbody |
мс | 62,13 ★ | 89,91 | 81,61 | 81,79 | 72,83 | 89,64 | 83,77 | 77,54 | 97,39 | 96,01 |
nqueens |
мс | 43,38 ★ | 65,02 | 58,66 | 59,45 | 58,23 | 60,58 | 56,92 | 60,47 | 66,51 | 68,16 |
pathlib |
мс | 228,7 | 232,9 | 232,0 | 232,0 | 220,3 | 222,0 | 219,6 | 219,3 | 217,8 ★ | 219,7 |
pickle |
мкс | 7,807 | 7,953 | 8,085 | 7,334 | 6,681 ★ | 6,784 | 6,906 | 6,706 | 9,743 | 8,021 |
pickle_dict |
мкс | 17,69 ★ | 20,50 | 19,16 | 19,49 | 18,45 | 18,76 | 17,90 | 17,83 | 26,59 | 20,84 |
pickle_list |
мкс | 2,820 | 3,041 | 2,869 | 2,804 | 2,600 | 2,576 | 2,517 ★ | 2,547 | 3,583 | 2,875 |
pickle_pure_python |
мкс | 175,2 ★ | 217,3 | 190,2 | 194,9 | 189,0 | 254,6 | 250,9 | 256,6 | 293,9 | 331,2 |
pidigits |
мс | 128,8 | 129,7 | 129,7 | 135,0 | 136,1 | 136,9 | 139,2 | 136,1 | 124,4 ★ | 128,3 |
pprint_pformat |
мс | 831,6 ★ | 1034 | 1006 | 1008 | 965,7 | 1172 | 903,7 | 908,7 | 1020 | 1115 |
pprint_safe_repr |
мс | 413,3 ★ | 502,5 | 506,7 | 486,7 | 469,7 | 566,1 | — | — | — | — |
pyflate |
мс | 239,9 ★ | 323,0 | 303,0 | 304,3 | 285,6 | 389,1 | 394,1 | 397,2 | 443,3 | 481,4 |
python_startup |
мс | 34,36 | 35,18 | 24,99 | 33,05 | 36,57 | 24,15 | 33,62 | 24,13 | 26,80 | 23,04 ★ |
python_startup_no_site |
мс | 29,23 | 29,09 | 19,93 | 27,34 | 26,76 | 19,83 | 28,93 | 19,81 | 23,32 | 18,62 ★ |
raytrace |
мс | 144,0 ★ | 192,8 | 176,1 | 195,3 | 192,9 | 272,7 | 266,2 | 273,1 | 302,7 | 358,0 |
regex_compile |
мс | 54,30 ★ | 75,55 | 73,19 | 79,10 | 74,54 | 90,70 | 86,59 | 89,70 | 102,6 | 109,1 |
regex_dna |
мс | 118,7 | 107,9 | 105,8 | 99,72 ★ | 101,0 | 110,0 | 107,5 | 113,7 | 122,7 | 121,4 |
regex_effbot |
мс | 1,940 | 1,588 | 1,565 | 1,509 ★ | 1,581 | 1,786 | 1,819 | 1,893 | 2,097 | 1,892 |
regex_v8 |
мс | 15,13 | 14,92 | 15,03 | 13,69 ★ | 14,16 | 15,35 | 16,51 | 15,16 | 17,59 | 17,62 |
richards |
мс | 22,75 ★ | 31,37 | 30,20 | 27,37 | 29,19 | 41,73 | 38,45 | 39,53 | 42,26 | 50,17 |
richards_super |
мс | 26,14 ★ | 35,52 | 34,13 | 30,93 | 36,03 | 50,83 | 48,11 | 47,65 | — | — |
scimark_fft |
мс | 163,4 ★ | 217,5 | 207,4 | 218,4 | 206,3 | 221,5 | 217,6 | 206,3 | 252,7 | 234,0 |
scimark_lu |
мс | 54,56 ★ | 77,23 | 70,77 | 74,08 | 65,88 | 92,71 | 90,00 | 88,69 | 105,2 | 140,0 |
scimark_monte_carlo |
мс | 36,72 ★ | 48,66 | 45,22 | 47,18 | 43,48 | 59,02 | 58,02 | 58,99 | 61,12 | 72,85 |
scimark_sor |
мс | 62,58 ★ | 93,32 | 83,76 | 90,14 | 78,83 | 103,4 | 105,7 | 103,0 | 115,4 | 139,3 |
scimark_sparse_mat_mult |
мс | 2,504 ★ | 3,372 | 3,225 | 3,379 | 3,200 | 3,530 | 3,149 | 3,059 | 3,498 | 3,177 |
shortest_path |
мс | 372,7 | 397,5 | 370,4 | 360,0 ★ | 407,7 | — | — | — | — | — |
spectral_norm |
мс | 52,58 ★ | 77,96 | 74,42 | 75,18 | 73,23 | 81,42 | 80,50 | 80,31 | 99,75 | 97,18 |
sphinx |
мс | 552,5 ★ | 617,7 | 591,2 | 610,0 | 624,3 | — | — | — | — | — |
sqlalchemy_declarative |
мс | 54,38 ★ | 61,12 | 64,18 | 67,42 | 67,76 | 77,65 | 72,58 | 72,28 | 82,56 | 80,96 |
sqlalchemy_imperative |
мс | 5,959 ★ | 6,798 | 6,865 | 6,966 | 6,914 | 8,431 | 8,549 | 8,320 | 9,762 | 9,374 |
sqlglot_v2_normalize |
мс | 58,48 ★ | 71,32 | 69,04 | 66,67 | 67,85 | 79,88 | — | — | — | — |
sqlglot_v2_optimize |
мс | 27,93 ★ | 33,61 | 32,29 | 32,42 | 31,75 | 37,03 | — | — | — | — |
sqlglot_v2_parse |
мс | 0,6214 ★ | 0,8693 | 0,7941 | 0,8246 | 0,8752 | 1,144 | — | — | — | — |
sqlglot_v2_transpile |
мс | 0,7834 ★ | 1,050 | 0,9646 | 1,010 | 1,045 | 1,362 | — | — | — | — |
sqlite_synth |
мкс | 1,370 | 1,523 | 1,507 | 1,516 | 1,341 ★ | 1,532 | 1,648 | 1,829 | 1,785 | 1,955 |
subparsers |
мс | 5,747 ★ | 6,756 | 18,20 | 45,06 | 39,63 | 45,51 | — | — | — | — |
sympy_expand |
мс | 220,0 ★ | 258,3 | 248,8 | 240,2 | 244,4 | 267,3 | 263,4 | 255,0 | 345,9 | 329,7 |
sympy_integrate |
мс | 9,662 ★ | 11,35 | 11,27 | 11,35 | 11,49 | 12,69 | 12,57 | 12,26 | 16,00 | 15,85 |
sympy_str |
мс | 124,8 ★ | 149,4 | 144,6 | 147,7 | 149,1 | 161,0 | 158,4 | 155,2 | 198,0 | 198,5 |
sympy_sum |
мс | 66,41 ★ | 78,46 | 76,69 | 79,50 | 84,24 | 90,98 | 87,22 | 86,32 | 102,5 | 106,8 |
telco |
мс | 4,111 | 4,940 | 5,039 | 4,170 | 4,006 | 3,850 | 3,710 ★ | 3,742 | 4,727 | 4,548 |
tomli_loads |
мс | 1023 ★ | 1585 | 1423 | 1557 | 1396 | 1679 | 1591 | 1619 | — | — |
tornado_http |
мс | 93,48 ★ | 99,88 | 99,31 | 101,5 | 102,7 | 120,4 | 116,4 | 114,9 | 121,8 | 125,6 |
typing_runtime_protocols |
мкс | 88,07 ★ | 107,0 | 100,3 | 101,5 | 290,5 | 311,7 | 300,5 | 311,7 | — | — |
unpack_sequence |
мкс | 0,03101 ★ | 0,04821 | 0,05086 | 0,04959 | 0,03492 | 0,04418 | 0,04135 | 0,04645 | 0,04103 | 0,04253 |
unpickle |
мкс | 8,827 | 8,886 | 9,203 | 8,857 | 7,641 ★ | 8,418 | 8,004 | 9,646 | 9,542 | 9,697 |
unpickle_list |
мкс | 2,865 | 2,806 | 3,067 | 3,118 | 2,530 ★ | 2,911 | 2,937 | 2,714 | 2,616 | 2,684 |
unpickle_pure_python |
мкс | 116,6 ★ | 157,6 | 140,4 | 143,1 | 144,8 | 177,0 | 171,1 | 178,5 | 224,8 | 239,9 |
urlsafe_base64_small |
мкс | 206,1 ★ | 340,4 | 316,2 | 305,1 | 312,3 | 412,5 | — | — | — | — |
xdsl_constant_fold |
мс | 20,97 ★ | 24,33 | 24,03 | 23,15 | 23,30 | 29,74 | — | — | — | — |
xml_etree_generate |
мс | 50,36 ★ | 59,89 | 58,41 | 58,83 | 51,97 | 55,29 | 53,82 | 57,17 | 67,46 | 68,77 |
xml_etree_iterparse |
мс | 47,99 ★ | 54,90 | 56,85 | 56,13 | 57,18 | 58,15 | 54,40 | 54,66 | 60,31 | 62,17 |
xml_etree_parse |
мс | 77,91 | 80,08 | 81,16 | 75,08 ★ | 80,35 | 81,05 | 83,62 | 84,17 | 92,31 | 89,00 |
xml_etree_process |
мс | 34,81 ★ | 42,23 | 40,30 | 40,51 | 37,55 | 44,00 | 42,61 | 44,74 | 54,81 | 56,71 |
Вывод: тестируйте производительность на своих задачах
В большинстве тестов, общих для всех десяти версий в этом наборе данных, Python 3.15 показывает наименьшее среднее время выполнения. Тем не менее в некоторых задачах лидируют более ранние версии. Результаты тестов запуска особенно зависят от среды, а использование разных версий набора тестов ограничивает выводы, которые можно сделать об изменениях самого интерпретатора. Для студентов, исследователей и разработчиков главный практический вывод таков: измеряйте производительность на задачах, важных именно для ваших проектов, и публикуйте не только результаты, но и условия их получения.