Выбор ответа Junior Функции и области видимости спрашивают часто обновлено

Как передаются аргументы в функцию Python

Вопрос

Что выведет print(nums)?

def touch(lst):
    lst.append(4)
    lst = [0]

nums = [1, 2, 3]
touch(nums)
print(nums)

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: [1, 2, 3, 4]. Функция получает ссылку на тот же список, поэтому append(4) меняет общий объект.

Варианты ответа

  1. [1, 2, 3, 4]правильный ответ
  2. [0], имя перепривязано
  3. [1, 2, 3], передана копия
  4. [0, 4]

Разбор

Функция получает ссылку на тот же список, поэтому append(4) меняет общий объект. Затем lst = [0] лишь перепривязывает локальное имя, и nums вызывающего это не затрагивает. Итог [1, 2, 3, 4]. Это и называют передачей ссылки на объект (call by sharing): не копия и не ссылка на переменную.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.