Независимы ли счётчики двух замыканий Python

Получатся 1, 1, 2. Каждый вызов make_counter создаёт собственное окружение и независимый count.

Короткий ответ

Что ответить на собеседовании

Получатся 1, 1, 2. Каждый вызов make_counter создаёт собственное окружение и независимый count.

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

Ответ с пояснениями

Условие

Функция make_counter создаёт count=0 и возвращает функцию, которая через nonlocal увеличивает count. Созданы a=make_counter() и b=make_counter(), затем вызваны a(), b(), a(). Какие результаты?

Ответ

Получатся 1, 1, 2. Каждый вызов make_counter создаёт собственное окружение и независимый count.

Если вместо второго вызова написать b = a, обе переменные будут ссылаться на одну функцию и один счётчик; последовательные результаты станут 1,2,3. Nonlocal обращается к переменной внешней функции, а не создаёт глобальный счётчик. Такое состояние требует отдельной синхронизации при конкурентном использовании.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее