TGViewer
Python вопросы с собеседований Python вопросы с собеседований @python_job_interview · 24.9K subscribers
Post #73 5.04K
Что распечатает код:

def f(x,l=[]):
for i in range(x):
l.append(i*i)
print(l)

f(2)
f(3,[3,2,1])
f(3)


Ответ

[0, 1]
[3, 2, 1, 0, 1, 4]
[0, 1, 0, 1, 4]

Почему?

Первый вызов функции волне очевиден, цикл добавляет 0, а затем 1 в пустой список. l – имя переменной которая указывает на список, хранящийся в памяти. Второй вызов начинается с создания нового списка, хранящегося в новом блоке памяти. l ссылается на новый список. Затем добавляются 0, 1 и 4 к новому списку. В третьем вызове функции происходит что-то странное. Она использует исходный список, хранящийся в исходной области памяти. Именно поэтому он начинается с 0 и 1.

Протестируйте следующий код, для понимания:

l_mem = []

l = l_mem # первый вызов
for i in range(2):
l.append(i*i)

print(l) # [0, 1]

l = [3,2,1] # второй вызов
for i in range(3):
l.append(i*i)

print(l) # [3, 2, 1, 0, 1, 4]

l = l_mem # третий вызов
for i in range(3):
l.append(i*i)

print(l) # [0, 1, 0, 1, 4]



@python_job_interview
  • 👍 17
  • 🔥 4
  • ❤ 1
  • 🐳 1
More from @python_job_interview
  1. Oct 5, 2026🖥 Лучшие практики Python 2026: 20 правил для кода в эпоху ИИ 20 практик написания Python-…
  2. Oct 3, 2026Вопросы на собеседовании Python Senior: 100 вопросов с ответами (2026) Вопросы на собеседо…
  3. Oct 2, 2026photo post
  4. Oct 2, 2026🌟 SGLang научил чат-модели отвечать вероятностями Команда открытого движка инференса SGLa…
  5. Oct 1, 2026🖥 Примеры кода на Python 2026: лучшие практики, разбор и задачи с решениями Python пример…
  6. Sep 30, 2026🔥 Почему Python-библиотеки всё чаще пишут критичные части на Rust Например, Pydantic v2 и…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →