
Что спрашивают на Junior Python собеседовании в 2026: 40 реальных вопросов
Почему именно эти вопросы
Список составлен на основе реальных собеседований в российских и международных IT-компаниях. Джуниоры чаще всего срезаются не на сложных алгоритмах, а на фундаментальных вещах — изменяемые и неизменяемые объекты, генераторы, декораторы.
Сохрани этот список и пройди каждый пункт — это займёт меньше времени, чем ты думаешь.
Базовые типы и структуры данных
1. В чём разница между list и tuple?
list — изменяемый (mutable), tuple — неизменяемый (immutable). Это влияет на хеширование: tuple можно использовать как ключ словаря, list — нет.
2. Как работает dict в Python 3.7+?
С Python 3.7 словари гарантированно сохраняют порядок вставки. Внутри — хеш-таблица с открытой адресацией. Среднее время операций — O(1).
3. В чём разница между is и ==?
== сравнивает значения, is сравнивает идентичность объектов (один ли это объект в памяти).
4. Что такое None, True, False в Python?
Синглтоны — существуют в единственном экземпляре. Поэтому правильно писать if x is None, а не if x == None.
5. Как устроен set?
Неупорядоченная коллекция уникальных элементов. Под капотом — хеш-таблица. Поиск и вставка — O(1). Элементы должны быть хешируемыми.
Строки и встроенные функции
6. Почему конкатенация строк в цикле неэффективна?
Строки иммутабельны — каждая конкатенация создаёт новый объект. Правильный подход — ''.join(list).
7. Чем f-string лучше .format()?
Быстрее и читаемее. f-string вычисляется в момент определения, .format() — в момент вызова. В Python 3.12+ f-string ещё более гибкие.
ООП
8. Что такое __init__ и __new__?
__new__ создаёт экземпляр класса, __init__ его инициализирует. В 99% случаев переопределяют только __init__. __new__ нужен при работе с иммутабельными типами или паттерном Singleton.
9. Что такое MRO (Method Resolution Order)?
Порядок, в котором Python ищет метод в иерархии классов при множественном наследовании. Использует алгоритм C3 linearization. Посмотреть можно через ClassName.__mro__.
10. В чём разница между @classmethod и @staticmethod?
@classmethodполучает класс (cls) первым аргументом — используется для фабричных методов@staticmethodне получает ни класс, ни экземпляр — обычная функция в пространстве имён класса
11. Что такое __slots__?
Оптимизация памяти: запрещает создание __dict__ у экземпляра, фиксирует список атрибутов. Снижает потребление памяти на 40–50% при большом количестве объектов.
12. Что такое дескриптор?
Объект, реализующий __get__, __set__ или __delete__. Именно на дескрипторах работают property, classmethod, staticmethod.
Функции и замыкания
13. Что такое замыкание (closure)?
Функция, которая запоминает переменные из внешней области видимости, даже после завершения этой функции.
14. Что такое декоратор и как написать свой?
Функция, которая принимает функцию и возвращает новую функцию. Используется для логирования, кеширования, авторизации.
15. Что делает functools.wraps?
Копирует метаданные оригинальной функции (__name__, __doc__) на функцию-обёртку. Без него my_func.__name__ вернёт 'wrapper'.
16. Типичная ловушка: мутабельный дефолтный аргумент
Генераторы и итераторы
17. Чем генератор отличается от списка?
Генератор вычисляет значения лениво (по одному), не хранит все элементы в памяти. Идеален для больших последовательностей.
18. Что такое yield from?
Делегирует итерацию вложенному генератору. Появился в Python 3.3.
19. Что такое send() у генератора?
Позволяет передавать значения внутрь генератора. Основа для корутин до появления async/await.
Асинхронность
20. В чём разница между threading и asyncio?
threading— настоящие потоки ОС, но GIL не даёт запускать Python-код параллельно (только I/O параллельно)asyncio— один поток, кооперативная многозадачность, эффективнее для I/O-bound задач
21. Когда использовать asyncio, а когда threading?
asyncio— для I/O-bound задач (HTTP-запросы, работа с БД, файловый ввод-вывод)threadingилиmultiprocessing— для CPU-bound задач
22. Что такое event loop?
Цикл обработки событий — ядро asyncio. Поочерёдно выполняет корутины, когда они ожидают I/O-операций.
23. Что делает asyncio.gather()?
Запускает несколько корутин конкурентно и ждёт завершения всех.
Обработка ошибок
24. В чём разница между Exception и BaseException?
BaseException — базовый класс всех исключений, включая KeyboardInterrupt и SystemExit. Exception — базовый класс для обычных ошибок. Перехватывать BaseException стоит только в крайних случаях.
25. Что такое finally?
Блок, который выполняется всегда — даже при исключении или return. Используется для освобождения ресурсов.
26. Как правильно логировать исключения?
Тестирование
27. В чём разница между unittest и pytest?
pytest лаконичнее (нет классов, нет self), мощнее (фикстуры, параметризация), лучше читается. unittest стандартная библиотека, не нужно ставить.
28. Что такое фикстура в pytest?
Функция, которая подготавливает окружение для теста. Управляет созданием и удалением ресурсов.
29. Что такое mock и когда его использовать?
Заглушка для внешних зависимостей (API, БД, файловая система). Позволяет тестировать логику в изоляции.
Типы и аннотации
30. Зачем нужны type hints?
Документируют интерфейс функции, помогают IDE и линтерам находить ошибки, улучшают читаемость. Не влияют на выполнение программы — только подсказки.
31. Чем Optional[X] отличается от X | None?
Это одно и то же, начиная с Python 3.10. X | None — более современный синтаксис.
32. Что такое TypeVar?
Переменная типа для обобщённых функций.
Производительность и инструменты
33. Что такое GIL и как он влияет на многопоточность?
Global Interpreter Lock — мьютекс, который позволяет только одному потоку исполнять Python-байткод в момент времени. Это делает CPU-bound задачи неэффективными в threading.
34. Как профилировать Python-код?
cProfile— встроенный профайлерpy-spy— low-overhead sampling profiler для productionmemory_profiler— профилирование памяти
35. Что такое __pycache__ и .pyc файлы?
Скомпилированный байткод Python. Ускоряет повторный запуск скрипта — не нужно парсить исходник заново.
Практические задачи
36. Реверс строки
37. Найти дубликаты в списке
38. FizzBuzz
39. Проверить, является ли строка палиндромом
40. Flatten вложенного списка
Как готовиться дальше
Знание ответов на эти вопросы — минимум. Интервьюеры часто задают follow-up: "А что если... ?", "Почему именно так?", "Что будет, если использовать в многопоточном контексте?"
Лучший способ подготовиться — практиковаться с реальными вопросами и сразу получать объяснения. На платформе Tech Path Finder есть курс по Python с квизами именно по этим темам — вопросы с уровнями Junior/Middle/Senior и детальными разборами.