Получить доступ

Почему Python медленный и как ускорить вычисления?

MiddleСложность и производительностьPython >=3.11
Ещё спрашивают так:
  • Чем помогают NumPy, Cython и PyPy?
Коротко

CPython — интерпретатор байткода с динамической типизацией: каждая операция проверяет типы, числа — объекты в куче. Ускорение: векторизация (NumPy, pandas — циклы на C), встроенные функции вместо ручных циклов, Cython/Rust-расширения для горячих мест, PyPy (JIT), процессы для параллелизма.

  • Python 3.11 ускорен на 10–60% (адаптивный интерпретатор), 3.13 — экспериментальный JIT
  • sum, sorted, set, dict, str.join реализованы на C
  • Чаще узкое место — ввод-вывод и алгоритм, а не скорость интерпретатора

А ещё Numba компилирует числовые функции декоратором @njit

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Откуда медлительность: a + b — поиск метода __add__ по типам, создание нового объекта int в куче, подсчёт ссылок. Цикл по миллиону чисел — миллионы таких операций.

Что помогает, по возрастанию усилий:

  1. Алгоритм и структуры данных: set вместо list для проверок принадлежности, словарь вместо поиска в цикле.
  2. Встроенные и стандартная библиотека — циклы внутри на C: sum(x*x for x in xs) медленнее np.dot(arr, arr) в десятки раз, но быстрее ручного цикла с накоплением.
  3. NumPy / pandas / polars — операции над массивами целиком.
  4. Numba, Cython, Rust (PyO3) — компиляция горячей функции.
  5. PyPy — альтернативный интерпретатор с JIT, ускоряет чистый Python в разы, но совместимость с C-расширениями хуже.
  6. Параллелизм — процессы или free-threaded сборка.

Версии CPython: 3.11 — специализирующий адаптивный интерпретатор (PEP 659), заметный прирост без изменения кода; 3.13 — экспериментальный JIT (copy-and-patch).

Что хотят услышать

  • Причины медлительности.
  • Способы ускорения по возрастанию усилий.
  • Начинать с профиля и алгоритма.

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем