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]
f(1)— параметрitemsне передан, используется дефолтный список. В него добавляется1, возвращается[1].f(1, [])— передан новый пустой список, в него добавляется1, возвращается[1].f(1)— снова вызывается без параметра, используется тот же дефолтный список, в который уже был добавлен1в первом вызове. Теперь добавляется ещё один1, возвращается[1, 1].
Это классическая «ловушка» с изменяемыми значениями по умолчанию в Python. Чтобы избежать такого поведения, лучше использовать None и создавать новый список внутри функции:
def f(item, items=None):
if items is None:
items = []
items.append(item)
return items