Что важно знать
- Память освобождается при обнулении счётчика ссылок; циклы ищет отдельный сборщик.
- Мелкие целые и некоторые строки кэшируются.
- Профилирование до оптимизации: cProfile, py-spy, line_profiler.
Подсчёт ссылок и сборщик циклов, байткод, производительность.
Практика. Профилировать медленный скрипт, найти узкое место и ускорить минимум в 3 раза без смены алгоритма на C.
Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.
Список — массив: доступ по индексу и append — O(1), вставка в начало и поиск in — O(n).
Полный разборСначала измерить, потом оптимизировать. cProfile (+ snakeviz) — время по функциям локально. py-spy — сэмплирующий профилировщик, подключается к работающему процессу без перезапуска и почти без накладных расходов, строит flame graph. line_profiler — построчно…
Полный разборПоверхностная копия создаёт новый контейнер со старыми элементами, глубокая — копирует всё рекурсивно.
Полный разборCPython — интерпретатор байткода с динамической типизацией: каждая операция проверяет типы, числа — объекты в куче. Ускорение: векторизация (NumPy, pandas — циклы на C), встроенные функции вместо ручных циклов, Cython/Rust-расширения для горячих мест, PyPy…
Полный разборВ CPython основной механизм — подсчёт ссылок: у каждого объекта счётчик, и когда он падает до нуля, объект освобождается сразу. Циклические ссылки (a ссылается на b, b на a) счётчик не обнулят — их находит циклический сборщик модуля gc, работающий по…
Полный разбор__slots__ = ("x", "y") заменяет у экземпляров словарь __dict__ на фиксированные ячейки: объект занимает в несколько раз меньше памяти, доступ к атрибутам чуть быстрее, а добавить новый атрибут нельзя (AttributeError).
Полный разборCPython заранее создаёт целые от −5 до 256 и переиспользует их — is для них True. Строки, похожие на идентификаторы, и константы в одном блоке кода интернируются компилятором. Всё это детали реализации: значения сравнивают через ==, а is — только с None и…
Полный разборСлабая ссылка не увеличивает счётчик ссылок: объект удаляется, когда исчезнут обычные ссылки, а слабая начинает возвращать None. Применение: кэши и реестры, которые не продлевают жизнь объектов (WeakValueDictionary, WeakKeyDictionary), разрыв циклов «родитель…
Полный разборПодсчёт ссылок и сборщик циклов, слабые ссылки, интернирование чисел и строк, копирование, сложность операций, профилирование и способы ускорения.
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.