50 вопросов Junior Python с ответами 2026
Собеседование Python Junior включает вопросы трёх типов: синтаксис и особенности языка, ООП, алгоритмическая задача. В 2026 году список стандартных вопросов стабилен — разбираем 50 самых частых с ответами. Используйте как чек-лист подготовки.
Базовый синтаксис и типы данных
1. В чём разница между list и tuple?
List — изменяемый (mutable), tuple — неизменяемый (immutable). Tuple немного быстрее и занимает меньше памяти. Tuple используют для данных, которые не должны меняться: координаты, RGB-значения, ключи словаря.
2. Чем set отличается от list?
Set хранит только уникальные элементы, неупорядочен, операции проверки вхождения O(1) вместо O(n) у list. Set используют для дедупликации и быстрого поиска.
3. Что такое словарь (dict) и как работает?
Dict — хеш-таблица. Ключи хешируются для быстрого доступа O(1). Начиная с Python 3.7 словари сохраняют порядок вставки. Ключи должны быть хешируемыми (неизменяемыми).
4. В чём разница между `is` и `==`?
`==` сравнивает значения. `is` проверяет, что это один и тот же объект в памяти (одинаковый `id()`). `None` всегда проверяют через `is None`, не через `== None`.
5. Что такое mutable и immutable объекты?
Mutable (изменяемые): list, dict, set. Immutable (неизменяемые): int, float, str, tuple. Передача immutable в функцию не изменяет оригинал — передаётся копия значения.
6. Что такое None в Python?
Singleton-объект, аналог null в других языках. Единственный экземпляр класса NoneType. Функция без явного `return` возвращает None.
7. Как работает f-строка?
f-строки (f-string) вычисляют выражения в `{}` прямо при создании строки: `f"Hello, {name}!"`. Быстрее и читаемее `.format()` и `%`.
Функции и замыкания
8. Что такое замыкание (closure)?
Функция, которая запоминает переменные из окружающей области видимости даже после того, как та область завершила выполнение. Используется в декораторах и фабриках функций.
9. Чем lambda отличается от def?
Lambda — анонимная однострочная функция: `lambda x: x * 2`. Не может содержать несколько операторов. `def` создаёт именованную функцию с произвольным телом. Lambda удобны как аргументы: `sorted(data, key=lambda x: x['age'])`.
10. Что такое args и kwargs?
`args` — позволяет функции принимать произвольное количество позиционных аргументов (как tuple). `kwargs` — произвольное количество именованных аргументов (как dict). Можно комбинировать: `def f(args, **kwargs)`.
11. Что такое генератор (generator)?
Функция с `yield` вместо `return`. Возвращает итератор, который генерирует значения лениво — по одному за раз. Не хранит все значения в памяти. Полезен для больших объёмов данных.
12. В чём разница между `yield` и `return`?
`return` завершает функцию и возвращает значение. `yield` приостанавливает функцию, возвращает значение, и при следующем вызове продолжает с того же места.
13. Что такое list comprehension?
Компактная запись для создания списка: `[x**2 for x in range(10) if x % 2 == 0]`. Быстрее эквивалентного цикла с `.append()`. Есть также dict/set comprehension и generator expression.
Декораторы и ООП
14. Что такое декоратор?
Функция, которая принимает другую функцию и возвращает новую с расширенным поведением. Синтаксис `@decorator` — это сокращение от `func = decorator(func)`. Используются для логирования, кэширования, авторизации.
15. Напишите простой декоратор.
```python
def timer(func):
import time
def wrapper(args, *kwargs):
start = time.time()
result = func(args, *kwargs)
print(f"Время: {time.time() - start:.3f}с")
return result
return wrapper
```
16. Что такое `functools.wraps` и зачем нужен?
Сохраняет метаданные исходной функции (`__name__`, `__doc__`) при оборачивании в декоратор. Без него задекорированная функция теряет своё имя.
17. В чём разница между классом и объектом?
Класс — шаблон (blueprint). Объект — конкретный экземпляр класса. `class Dog:` — класс. `rex = Dog()` — объект.
18. Что такое `__init__`?
Конструктор класса. Вызывается при создании объекта. Инициализирует атрибуты экземпляра.
19. Чем отличается метод экземпляра от classmethod и staticmethod?
Метод экземпляра получает `self` (экземпляр). `@classmethod` получает `cls` (класс), используется как альтернативный конструктор. `@staticmethod` не получает ни того, ни другого — обычная функция в пространстве имён класса.
20. Что такое наследование в Python?
Класс-потомок наследует атрибуты и методы родителя. Python поддерживает множественное наследование. `super()` вызывает метод родительского класса.
21. Что такое полиморфизм?
Возможность использовать объекты разных классов через единый интерфейс. В Python реализуется через duck typing: если объект «крякает», значит, это утка — не нужна явная проверка типа.
22. Что такое инкапсуляция в Python?
Сокрытие внутреннего состояния. В Python нет настоящих приватных атрибутов: `_attr` — соглашение «для внутреннего использования», `__attr` — name mangling (переименовывается в `_ClassName__attr`).
23. Что такое `__str__` и `__repr__`?
`__str__` — читаемое представление для пользователя (вызывается `str()`, `print()`). `__repr__` — однозначное представление для разработчика, должно позволять воссоздать объект (`repr()`).
GIL, память и производительность
24. Что такое GIL?
Global Interpreter Lock — мьютекс, позволяющий только одному потоку выполнять Python-байткод в один момент времени. Из-за него многопоточность Python плохо масштабируется для CPU-задач.
25. Когда threading полезен несмотря на GIL?
Для I/O-bound задач: сетевые запросы, работа с файлами, ожидание БД. Пока один поток ждёт ответа от сети, GIL освобождается и другие потоки работают.
26. Чем `multiprocessing` отличается от `threading`?
`multiprocessing` создаёт отдельные процессы, каждый со своим GIL и памятью — для CPU-bound задач. `threading` — потоки в одном процессе — для I/O-bound.
27. Что такое garbage collector в Python?
Python управляет памятью через подсчёт ссылок (reference counting). Когда счётчик ссылок объекта падает до 0 — объект удаляется. Для циклических ссылок работает сборщик мусора (gc module).
28. Что такое `__slots__`?
Атрибут класса, позволяющий явно указать допустимые атрибуты экземпляра. Экономит память (нет `__dict__`) и немного ускоряет доступ. Используется для классов с большим количеством экземпляров.
Работа с данными и стандартная библиотека
29. Как читать файл в Python?
```python
with open('file.txt', 'r', encoding='utf-8') as f:
content = f.read()
```
Конструкция `with` гарантирует закрытие файла даже при исключении.
30. Что такое context manager (`with`)?
Объект с методами `__enter__` и `__exit__`. `__enter__` вызывается при входе в блок `with`, `__exit__` — при выходе (в том числе при исключении). Гарантирует освобождение ресурсов.
31. Как обработать исключение?
```python
try:
result = 10 / x
except ZeroDivisionError:
print("На ноль делить нельзя")
except (TypeError, ValueError) as e:
print(f"Ошибка: {e}")
finally:
print("Выполнится всегда")
```
32. Как работает `enumerate`?
Возвращает пары (индекс, значение): `for i, item in enumerate(lst, start=1):`. Удобнее, чем `range(len(lst))`.
33. Что делают `map` и `filter`?
`map(func, iterable)` применяет функцию к каждому элементу. `filter(func, iterable)` оставляет элементы, для которых функция возвращает True. Оба возвращают итераторы.
34. Как отсортировать список объектов?
`sorted(items, key=lambda x: x.age)` — возвращает новый список. `items.sort(key=...)` — сортирует на месте. Для реверса: `reverse=True`.
35. Что такое `collections` и какие классы в нём используете?
`defaultdict` — словарь с дефолтным значением. `Counter` — подсчёт частоты элементов. `deque` — двусторонняя очередь с O(1) добавлением с обоих концов. `namedtuple` — tuple с именованными полями.
Асинхронность
36. Что такое async/await?
Ключевые слова для асинхронного программирования. `async def` объявляет корутину. `await` приостанавливает выполнение корутины до завершения асинхронной операции, освобождая event loop для других задач.
37. Когда использовать asyncio?
Для I/O-bound задач с большим числом конкурентных операций: HTTP-запросы, работа с WebSocket, чтение файлов. Asyncio эффективнее threading для тысяч одновременных соединений.
38. Чем asyncio отличается от threading?
Asyncio — кооперативная многозадачность в одном потоке. Threading — вытесняющая многозадачность, потоки переключаются принудительно. Asyncio более предсказуем и быстрее при большом числе соединений.
Тестирование и инструменты
39. Что такое unit-тест?
Тест, проверяющий один изолированный модуль (функцию, класс). В Python используют `unittest` или `pytest`. Хороший unit-тест — быстрый, независимый, детерминированный.
40. Что такое mock и когда его использовать?
Mock заменяет реальные зависимости (БД, сеть) на поддельные объекты при тестировании. Позволяет тестировать код изолированно. `unittest.mock.MagicMock`, `patch`.
41. Что такое `pip` и `virtualenv`?
`pip` — менеджер пакетов Python. `virtualenv` (или `venv`) создаёт изолированное окружение с отдельным набором пакетов. Позволяет иметь разные версии зависимостей для разных проектов.
Алгоритмы и структуры данных
42. Какова сложность доступа к элементу list по индексу?
O(1) — list в Python реализован как массив с произвольным доступом.
43. Какова сложность поиска элемента в list vs set?
В list: O(n) — перебор всех элементов. В set: O(1) — хеш-таблица.
44. Что такое рекурсия и в чём её ограничение в Python?
Функция, вызывающая саму себя. Python ограничивает глубину рекурсии (по умолчанию 1000, `sys.setrecursionlimit()`). Для глубоких рекурсий лучше использовать итеративный подход или стек.
45. Напишите функцию реверса строки.
```python
def reverse(s):
return s[::-1]
```
Срез с шагом -1 — стандартный питонический способ.
Типизация и современный Python
46. Что такое type hints (аннотации типов)?
Синтаксис указания типов переменных и возвращаемых значений: `def greet(name: str) -> str:`. Не влияют на выполнение — Python не проверяет типы в рантайме. Нужны для IDE, mypy и читаемости.
47. Что такое dataclass?
Декоратор `@dataclass` автоматически генерирует `__init__`, `__repr__`, `__eq__` по объявленным полям. Удобен для хранения данных вместо обычных классов.
48. Что нового в Python 3.10+?
Match statement (паттерн-матчинг, аналог switch). Улучшенные сообщения об ошибках. `X | Y` вместо `Union[X, Y]` для аннотаций типов.
49. Что такое walrus operator (:=)?
Оператор присваивания в выражении (Python 3.8+): `if n := len(data):` — присваивает и проверяет одновременно. Уменьшает дублирование кода.
50. Какие инструменты используете для форматирования кода?
`black` — авто-форматер без настроек. `flake8` / `ruff` — линтеры. `isort` — сортировка импортов. `mypy` — проверка типов. В реальных командах обычно настраивают pre-commit hooks.
FAQ
Какие вопросы по Python задают в Яндексе?
Алгоритмическая задача уровня LeetCode Easy/Medium на Python + вопросы по ООП, GIL, генераторам. Яндекс также любит вопросы на понимание асинхронности. Подробнее — собеседование на стажировку в Яндекс.
Обязательно знать asyncio для junior-позиции?
Базовое понимание async/await — да, в 2026 году это стандарт. Глубокое знание event loop и создания собственных протоколов — уровень middle.
Нужно ли знать Django и FastAPI обоим?
Не обязательно оба. Знайте один фреймворк уверенно. FastAPI набирает популярность, Django — классика с большим сообществом.
Как проверяют знание Python на техническом интервью?
Задача на код + 10–15 вопросов по языку. Обычно 60–90 минут. Думайте вслух — интервьюер хочет видеть ход мыслей, а не только правильный ответ. Читайте как подготовиться к собеседованию junior-разработчика.
Что готовить кроме Python?
SQL (JOIN, оконные функции), Git, базовое понимание HTTP/REST. Подробнее — в вопросах на собеседовании Junior.