← Все вопросы

Почему меняется список, который я передал в функцию?

Задан 17 дней назад4 просмотров2 ответа
7

Передаю список в функцию, внутри делаю .append, и снаружи он тоже изменился. Я думал, аргументы копируются. Что происходит и как сделать, чтобы оригинал не трогать?

2 ответа

6
✓ Принятый ответ — помог автору

Это называется «передача по ссылке на объект». С неизменяемыми (int, str, tuple) такого эффекта нет, потому что их нельзя менять на месте. Подвох ещё в значениях по умолчанию: никогда не пиши def f(x=[]) — этот список живёт между вызовами.

Игорь Попов Про `def f(x=[])` — классическая ловушка, сам наступал. · 16 дней назад
3

В Python в функцию передаётся ссылка на объект, а не копия. Список изменяемый, поэтому append внутри меняет тот же объект снаружи. Если нужен нетронутый оригинал — копируй: new = lst.copy() (или lst[:]), и работай с копией.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект