@ovrd0se

Что происходит со ссылкой на элемент списка?

Пусть у меня есть какой-то список:
someList = [val1, val2, val3, ..., valN]
Перебираем список:
for item in someList:
    #Тут мы делаем что-то

Собственно вопрос: по идее item ссылается на последний элемент в списке? Что тогда произойдет, если мы удалим ссылку "someList"? Можно ли при этом будет достать второй элемент списка, например? Или я не прав? Что тогда произойдет со ссылкой "item"? Как она будет обработана сборщиком мусора?
Заранее прошу прощения за дурацкий вопрос.
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
В питоне каждый объект имеет счетчик ссылок.
Переменные это фактически ссылки на объекты.
При удалении переменной счетчик ссылок объекта декрементируется, при создании ссылок (копирование или создание переменной) счетчик инкрементируется.
После операции декремента счетчика ссылок питон проверяет счетчик на равенство 0 (т.е. когда ссылок на переменную больше нет). И если счетчик нулевой, то переменная удаляется из памяти (освобождается память занятая объектом).
Так что если удалите someList и на его элементы не будет других ссылок, то и сами элементы удалятся из памяти. Т.к. после цикла item сохраняет ссылку на последний элемент, то после удаления someList item по прежнему будет доступен.
Вот такой он хитрый сборщик мусора в питоне :-)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы