← Все вопросы
Почему функция изменяет мой список, хотя я не возвращаю его?
0
def add_item(lst): lst.append(4) lst = [1, 2, 3] return
my_list = [1, 2, 3] add_item(my_list) print(my_list) # Что выведет? Я ожидал, что список останется [1, 2, 3], потому что внутри функции я присваиваю lst = [1, 2, 3]. Но почему-то выводится [1, 2, 3, 4]. Почему? И как сделать так, чтобы функция не меняла исходный список?
1 ответ
0
выведет [1, 2, 3, 4].
тут две разные вещи, которые легко перепутать:
lst.append(4)меняет сам объект, на который смотритlst. а это тот же самый объект, что иmy_list— в питон передаётся ссылка, а не копия. поэтомуmy_listреально стал[1, 2, 3, 4].lst = [1, 2, 3]— это НЕ изменение списка, а переприсваивание локального имениlst. ты просто сказал «пусть теперь локальная переменная lst указывает на новый список». наmy_listснаружи это никак не влияет — она как смотрела на старый объект, так и смотрит.
то есть append меняет объект (видно снаружи), а lst = ... меняет только то, куда смотрит локальное имя (снаружи не видно). return без значения вообще ничего не отдаёт, вернётся None
Ваш ответ
, чтобы ответить на вопрос.