Вопросы на собеседовании Python-разработчика: разбор с ответами

Частые вопросы на собеседовании Python-разработчика в 2026 году: типы данных, ООП, GIL, генераторы, asyncio и декораторы — с короткими ответами и примерами по грейдам.

· 14 мин чтения
#собеседование#python#вопросы

Собеседование на позицию Python-разработчика почти всегда строится по одной схеме: сначала вопросы по основам языка, потом — структуры данных и ООП, затем асинхронность и практика, и под конец задача на код. Ниже — разбор вопросов, которые реально задают на HH-вакансиях в 2026 году, с короткими ответами, по которым удобно готовиться. В конце — как получать больше приглашений на сами собеседования, а не только готовиться к ним.

Основы языка и типы данных

Чем список отличается от кортежа? Список (list) изменяемый, кортеж (tuple) — нет. Кортеж хешируем, если все его элементы тоже хешируемы, поэтому может быть ключом словаря или элементом множества; занимает чуть меньше памяти и немного быстрее. Список — для изменяемых коллекций, кортеж — для фиксированных наборов.

Какие типы изменяемые, а какие нет? Неизменяемые: int, float, str, tuple, frozenset, bytes. Изменяемые: list, dict, set, bytearray. Это влияет на то, что можно сделать ключом словаря, и на поведение аргументов по умолчанию.

Чем is отличается от ==? == сравнивает значения (вызывает __eq__), is — идентичность объектов в памяти (сравнение по id). С None всегда используют is: if x is None.

Почему нельзя ставить изменяемый объект аргументом по умолчанию? Значение по умолчанию вычисляется один раз при определении функции. Если это [] или {}, один и тот же объект разделяется между вызовами и накапливает данные. Правильно — ставить None и создавать объект внутри функции.

Как устроен словарь и какая сложность доступа? Словарь — это хеш-таблица. Вставка, поиск и удаление в среднем за O(1). Начиная с Python 3.7 словарь сохраняет порядок вставки ключей.

Функции и ООП

Что такое *args и **kwargs? Это приём переменного числа аргументов: *args собирает позиционные в кортеж, **kwargs — именованные в словарь. При вызове ими же можно распаковывать коллекции в аргументы.

Что такое декоратор? Это функция (или класс), которая оборачивает другую функцию, расширяя её поведение без изменения исходного кода — через замыкание. Чтобы не терять метаданные обёрнутой функции, используют functools.wraps. Декораторы применяют для логирования, кеширования, проверки прав, замера времени.

Чем @staticmethod отличается от @classmethod? staticmethod не получает ни self, ни cls — это просто функция в пространстве имён класса. classmethod получает cls (сам класс) и удобен для альтернативных конструкторов вроде from_dict.

Что такое MRO? Method Resolution Order — порядок, в котором Python ищет метод при множественном наследовании. Строится по алгоритму C3-линеаризации, доступен через ClassName.__mro__.

Что такое dunder-методы? «Магические» методы вида __init__, __repr__, __eq__, __len__, __iter__. Они задают, как объект ведёт себя со встроенными операциями: создание, печать, сравнение, итерация, длина.

Что такое контекстный менеджер? Объект с методами __enter__ и __exit__, который используют в блоке with. Гарантирует освобождение ресурса (файла, блокировки, соединения) даже при исключении. Быстрый способ создать свой — декоратор contextlib.contextmanager.

Структуры данных и генераторы

Чем генератор отличается от списка? Генератор ленивый: отдаёт элементы по одному через yield и хранит в памяти только текущее состояние — O(1) памяти. Список держит все элементы сразу. Генератор одноразовый: после прохода его нужно создавать заново.

Что такое comprehension? Компактный синтаксис создания коллекций: [x*x for x in data], аналогично для словарей и множеств. Читается лучше и обычно быстрее цикла с append.

Какая сложность у операций со списком? Индексация — O(1), append амортизированно O(1), вставка или удаление в середину — O(n), проверка x in list — O(n). Если нужны частые проверки вхождения, берут set (O(1) в среднем).

Асинхронность и многозадачность

Что такое GIL? Global Interpreter Lock — глобальная блокировка интерпретатора CPython, из-за которой байткод в один момент исполняет только один поток. Поэтому потоки не ускоряют CPU-bound вычисления.

Когда использовать threading, multiprocessing, asyncio? threading — для IO-bound задач, где GIL освобождается на ожидании сети или диска. multiprocessing — для CPU-bound: отдельные процессы обходят GIL и используют несколько ядер. asyncio — для тысяч одновременных IO-операций на одном потоке через кооперативную многозадачность.

Что такое корутина и async/await? Корутина — функция, объявленная через async def. await приостанавливает её до готовности awaitable-объекта, а событийный цикл в это время переключается на другие корутины. Так на одном потоке обслуживают множество соединений.

Практика и инструменты

Как обрабатывают исключения? Через try / except / else / finally. Ловят конкретные типы исключений, а не «голый» except. Свои исключения создают наследованием от Exception. finally выполняется всегда — для очистки.

Что такое виртуальное окружение и зачем оно? Изолированное окружение зависимостей проекта (venv, poetry, uv). Нужно, чтобы версии пакетов разных проектов не конфликтовали между собой и сборка была воспроизводимой.

Чем deepcopy отличается от copy? copy.copy делает поверхностную копию: вложенные объекты остаются общими по ссылке. copy.deepcopy рекурсивно копирует всю структуру — изменения в копии не затрагивают оригинал.

Что спрашивают на разных грейдах

  • Junior — синтаксис, типы данных, базовый ООП, структуры данных, умение написать простую функцию и разобрать чужой код.
  • Middle — декораторы, генераторы, контекстные менеджеры, исключения, асинхронность, тестирование (pytest), работа с БД и ORM, типичные паттерны.
  • Senior — проектирование систем, оптимизация и профилирование, нюансы GIL и управления памятью, выбор архитектуры, code review, ответственность за решения.

Как получать больше собеседований, а не только готовиться к ним

Подготовка к вопросам бесполезна, если приглашений на собеседования мало. На плотном IT-рынке на одну Python-вакансию приходит 70–200 откликов, и решает скорость: рекрутёр читает первые 10–20 откликов, а не сотый.

Два рычага, которые реально влияют на количество приглашений:

  1. Резюме, которое видят. Если резюме плохо ранжируется в поиске HH, работодатели не находят вас сами. Помогает оптимизация под алгоритмы — подробно в статье «Прожарка резюме под алгоритмы HH.ru» и про ключевые слова в резюме.
  2. Скорость и охват откликов. Откликаться первым на свежие вакансии важнее, чем откликаться много. Как это автоматизировать без потери качества сопроводительных — в разборе «Автоотклик на HH.ru в 2026».

JobTurbo закрывает обе задачи: переписывает резюме под алгоритмы HH и сам откликается на подходящие вакансии с персональным AI-письмом под каждую. Первые отклики — бесплатно, без карты. Дальше готовитесь к собеседованиям, на которые вас уже позвали.

Частые вопросы

Что такое GIL в Python?

GIL (Global Interpreter Lock) — глобальная блокировка интерпретатора CPython, из-за которой в один момент времени байткод исполняет только один поток. Поэтому потоки не ускоряют CPU-bound задачи: для них берут multiprocessing, а для IO-bound — threading или asyncio, потому что на операциях ввода-вывода GIL освобождается.

Чем список отличается от кортежа в Python?

Список (list) изменяемый, кортеж (tuple) — нет. Кортеж хешируем, если все его элементы тоже хешируемы, поэтому может быть ключом словаря или элементом множества; занимает чуть меньше памяти и работает немного быстрее. Список используют для изменяемых коллекций, кортеж — для фиксированных наборов значений.

Чем is отличается от == в Python?

Оператор == сравнивает значения объектов (вызывает метод __eq__), а is — идентичность, то есть указывают ли два имени на один и тот же объект в памяти (сравнение по id). С None всегда используют is: `if x is None`.

Когда использовать threading, multiprocessing и asyncio?

threading — для IO-bound задач (сеть, диск), где GIL освобождается на ожидании. multiprocessing — для CPU-bound задач: отдельные процессы обходят GIL и используют несколько ядер. asyncio — для тысяч одновременных IO-операций на одном потоке через кооперативную многозадачность (async/await).

Какие вопросы задают Python-джуниору, а какие — сеньору?

Джуниора спрашивают про синтаксис, типы данных, базовый ООП и структуры данных. Миддла — про декораторы, генераторы, исключения, асинхронность, тестирование, работу с БД и ORM. Сеньора — про архитектуру, оптимизацию, нюансы GIL и памяти, проектирование систем и code review.

Запустите автоотклик бесплатно

Первые 10 откликов — без оплаты. AI напишет уникальное сопроводительное к каждой вакансии.

Подключить JobTurbo →