Статья подготовлена для студентов курса «Web-разработчик на Python» в образовательном проекте OTUS. Снова сходив на несколько собеседований и пройдя тестовые задания, я заметил, что интервьюерам нравятся задания наподобие следующего. Вопрос: Что выведет этот код? Вывод первых двух строк достаточно очевиден, однако результат выполнения третьей строки f(3) не показался мне таким однозначным. Давайте посмотрим, что происходит после инициализации функции f. Чтобы запустить этот код, я воспользуюсь IPython. Пустой список, который мы видим из результата выполнения f.__defaults__ — это переменная l в коде функции. Ничего особенного. Однако! Теперь мы видим, что переменная l имеет значение [0, 1] в силу изменчивости объекта списка в Python и передачи аргументов функции в качестве ссылки. Тоже ничего особенного. Просто передача объекта list в качестве переменной l. А вот теперь самое интересное. Когда вы запускаете f(3), Python не использует пустой список, который определен в ко