Почему удаление переменной, назначенной другой переменной, не влияет на новую переменную? - PullRequest
2 голосов
/ 04 мая 2020

Если я сделаю li = [1,2,3], а затем сделаю a = li, a присваивается li, верно? Однако, когда я делаю del li и затем печатаю a, он все равно показывает [1,2,3]. Когда я делаю li.append(4) и печатаю a, тогда почему это показывает [1,2,3,4]?

Я понимаю, что a не сделал копию li (так как для этого используется метод .copy()), но почему a по-прежнему показывает значение li, используемое для есть

1 Ответ

0 голосов
/ 04 мая 2020

del не удаляет переменную . del удаляет только имя , и сборщик мусора (в свое время) ищет переменные, на которые ничего не ссылается, и правильно освобождает их память.

В этом В этом случае вы присваиваете имя a для ссылки на ту же переменную, на которую ссылается имя li. Когда вы используете .append(), он изменяет переменную, и все имена, ссылающиеся на переменную, смогут увидеть это изменение. И когда вы делаете del li, чтобы удалить имя li, оно не удаляет имя a, которое все еще ссылается на переменную. Таким образом, переменная не освобождается и не удаляется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...