Этап 8 из 11 · ≈ 6 ч

Память и устройство CPython

Основа с Middle

Подсчёт ссылок и сборщик циклов, байткод, производительность.

Что важно знать

  • Память освобождается при обнулении счётчика ссылок; циклы ищет отдельный сборщик.
  • Мелкие целые и некоторые строки кэшируются.
  • Профилирование до оптимизации: cProfile, py-spy, line_profiler.

Критерии освоения

Middle ≈ 6 ч

  • Объясняет подсчёт ссылок и сборку циклических ссылок
  • Профилирует код (cProfile, py-spy) и ускоряет узкие места

Практика. Профилировать медленный скрипт, найти узкое место и ускорить минимум в 3 раза без смены алгоритма на C.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Какая сложность у основных операций со списком, словарём и множеством?Junior

Список — массив: доступ по индексу и append — O(1), вставка в начало и поиск in — O(n).

Полный разбор
Как найти, что тормозит в Python-программе?Middle

Сначала измерить, потом оптимизировать. cProfile (+ snakeviz) — время по функциям локально. py-spy — сэмплирующий профилировщик, подключается к работающему процессу без перезапуска и почти без накладных расходов, строит flame graph. line_profiler — построчно…

Полный разбор
Чем поверхностная копия отличается от глубокой?Junior

Поверхностная копия создаёт новый контейнер со старыми элементами, глубокая — копирует всё рекурсивно.

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

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

Полный разбор
Как Python управляет памятью — подсчёт ссылок и сборщик мусора?Middle

В CPython основной механизм — подсчёт ссылок: у каждого объекта счётчик, и когда он падает до нуля, объект освобождается сразу. Циклические ссылки (a ссылается на b, b на a) счётчик не обнулят — их находит циклический сборщик модуля gc, работающий по…

Полный разбор
Что такое __slots__ и когда его использовать?Middle

__slots__ = ("x", "y") заменяет у экземпляров словарь __dict__ на фиксированные ячейки: объект занимает в несколько раз меньше памяти, доступ к атрибутам чуть быстрее, а добавить новый атрибут нельзя (AttributeError).

Полный разбор
Почему a is b для чисел и строк иногда True, а иногда False?Middle

CPython заранее создаёт целые от −5 до 256 и переиспользует их — is для них True. Строки, похожие на идентификаторы, и константы в одном блоке кода интернируются компилятором. Всё это детали реализации: значения сравнивают через ==, а is — только с None и…

Полный разбор
Что такое слабые ссылки (weakref) и где они нужны?Middle

Слабая ссылка не увеличивает счётчик ссылок: объект удаляется, когда исчезнут обычные ссылки, а слабая начинает возвращать None. Применение: кэши и реестры, которые не продлевают жизнь объектов (WeakValueDictionary, WeakKeyDictionary), разрыв циклов «родитель…

Полный разбор

Разборы темы

← Вся карта «Python»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования