Список по умолчанию создаётся один раз при определении функции и затем разделяется всеми вызовами без my_list. Поэтому элементы неожиданно накапливаются между вызовами.
Определите проблему следующей функции Python и объясните, почему она возникает:
Список по умолчанию создаётся один раз при определении функции и затем разделяется всеми вызовами без my_list. Поэтому элементы неожиданно накапливаются между вызовами.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите проблему следующей функции Python и объясните, почему она возникает:
from typing import Any
def add_item(item: Any, my_list: list = []) -> list:
my_list.append(item)
return my_list
add_item(5)
Ответ
Список по умолчанию создаётся один раз при определении функции и затем разделяется всеми вызовами без my_list. Поэтому элементы неожиданно накапливаются между вызовами.
def add_item(item, my_list=None):
if my_list is None:
my_list = []
my_list.append(item)
return my_list
Теперь вызовы без списка независимы. Переданный явно список по-прежнему изменяется; если это не требуется, сначала создайте его копию. Один вызов add_item(5) не демонстрирует проблему полностью: она становится заметна при следующем вызове.