Вы должны думать о списках Python как «указатели».
Например, если вы объявите список как так:
elements = [1, 2, 3]
Это будет видно в памяти, как это:
elements → [ ↓, ↓, ↓ ]
1 2 3
Итак, когда вы изменить элемент в списке вы делаете что-то вроде этого:
elements[1] = 4
4
elements → [ ↓, ↑, ↓ ]
1 2 3
Обратите внимание, что номер 2 не имеет ссылки на указатель, поэтому он будет «ушел» r потерян из памяти ", и он больше не доступен. Так что же происходит, когда вы переназначить саму переменную:
elements[:] = []
[]
elements ↑ [ ↓, ↓, ↓ ]
1 4 3
Ключ, чтобы понять, является то, что первоначальный список также «ушел или потерял из памяти» и он больше не доступен. Еще один важный ключ, который следует понимать, заключается в том, что нарезка:
elements[:]
Получите указатель (или стрелку на моих иллюстрациях), на которую ссылается переменная.
Так вот почему это точно так же использовать
del elements[:]
(я удалить стрелку и установить новую стрелу в пустой список)
или
elements[:] = []
(я делаю переменную Теперь точка в новый пустой список, старая стрелка будет удалена при разыменовании)
Надеюсь, это поможет!
Если в цикле нет условия, тогда нет необходимости использовать петлю. Возможно, автор не знает о других методах. –
Плохой код. Вы видели это здесь? Возможно, это просто демоверсия копирования списка, чтобы избежать ошибок при удалении во время итерации. – tdelaney
Код такой, как есть. И это какой-то «реальный» код. Но спасибо, ты утешишь меня в том, что я думал. Но когда дело доходит до понимания чужого кода, я всегда боюсь пропустить какой-то тонкий момент ... –