Sobes.tech
Middle
14

Что выведет [] is []? def f(item, items=[]): items.append(item) return items f(1) f(1, []) f(1)

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

В этом коде используется изменяемый объект по умолчанию — список items=[], который сохраняется между вызовами функции.

Разберём вызовы:

def f(item, items=[]):
    items.append(item)
    return items

print(f(1))       # [1]
print(f(1, []))   # [1]
print(f(1))       # [1, 1]
  1. f(1) — параметр items не передан, используется дефолтный список. В него добавляется 1, возвращается [1].
  2. f(1, []) — передан новый пустой список, в него добавляется 1, возвращается [1].
  3. f(1) — снова вызывается без параметра, используется тот же дефолтный список, в который уже был добавлен 1 в первом вызове. Теперь добавляется ещё один 1, возвращается [1, 1].

Это классическая «ловушка» с изменяемыми значениями по умолчанию в Python. Чтобы избежать такого поведения, лучше использовать None и создавать новый список внутри функции:

def f(item, items=None):
    if items is None:
        items = []
    items.append(item)
    return items