Определите проблему следующей функции Python и объясните, почему она возникает:

Список по умолчанию создаётся один раз при определении функции и затем разделяется всеми вызовами без my_list. Поэтому элементы неожиданно накапливаются между вызовами.

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

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

Список по умолчанию создаётся один раз при определении функции и затем разделяется всеми вызовами без 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) не демонстрирует проблему полностью: она становится заметна при следующем вызове.

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

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

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

Подробнее