Почему add_user накапливает имена между вызовами

Последовательно: ['Анна'], ['Анна', 'Борис'], ['Анна', 'Борис', 'Вера']. Все вызовы без второго аргумента используют один изменяемый default.

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

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

Последовательно: ['Анна'], ['Анна', 'Борис'], ['Анна', 'Борис', 'Вера']. Все вызовы без второго аргумента используют один изменяемый default.

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

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

Условие

Дана Python-функция def add_user(name, users=[]): users.append(name); return users. Вызывают print(add_user('Анна')), затем для Бориса и Веры. Какие списки появятся?

Ответ

Последовательно: ['Анна'], ['Анна', 'Борис'], ['Анна', 'Борис', 'Вера']. Все вызовы без второго аргумента используют один изменяемый default.

Если накопление не задумано, используйте users=None и создавайте новый список внутри. Если нужен общий реестр, выразите его явно как состояние отдельного объекта с определённым жизненным циклом. Не используйте случайное сохранение default как скрытую базу пользователей; это плохо контролируется и не обеспечивает конкурентную безопасность.

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

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

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

Подробнее