Последовательно: ['Анна'], ['Анна', 'Борис'], ['Анна', 'Борис', 'Вера']. Все вызовы без второго аргумента используют один изменяемый default.
Почему add_user накапливает имена между вызовами
Последовательно: ['Анна'], ['Анна', 'Борис'], ['Анна', 'Борис', 'Вера']. Все вызовы без второго аргумента используют один изменяемый default.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дана Python-функция def add_user(name, users=[]): users.append(name); return users. Вызывают print(add_user('Анна')), затем для Бориса и Веры. Какие списки появятся?
Ответ
Последовательно: ['Анна'], ['Анна', 'Борис'], ['Анна', 'Борис', 'Вера']. Все вызовы без второго аргумента используют один изменяемый default.
Если накопление не задумано, используйте users=None и создавайте новый список внутри. Если нужен общий реестр, выразите его явно как состояние отдельного объекта с определённым жизненным циклом. Не используйте случайное сохранение default как скрытую базу пользователей; это плохо контролируется и не обеспечивает конкурентную безопасность.