Список изменений значений в циклах для python - PullRequest
0 голосов
/ 14 июля 2020

У меня есть основной c вопрос относительно того, что a for l oop делает со списком в Python. Я видел несколько связанных вопросов на веб-сайте, но почему-то эти примеры слишком сложны, и я все еще не могу решить свою проблему.

Рассмотрим следующий код.

l=[1, 2, 3, 4, 5, 6, 7, 8]

for i in range(4):
    
    t=l
    print(t)
    print(l)
    del t[0]

Я ожидал, что на каждой итерации первый элемент списка t удаляется, а список l не изменяется и должен оставаться [1, 2, 3, 4, 5, 6, 7, 8]. Однако на выходе получается

[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[2, 3, 4, 5, 6, 7, 8]
[2, 3, 4, 5, 6, 7, 8]
[3, 4, 5, 6, 7, 8]
[3, 4, 5, 6, 7, 8]

То есть не только первый элемент t, но и первый элемент l удаляется на каждой итерации, как если бы l заблокирован для быть t, а не какой-то внешней переменной для l oop.

Почему это так? И как я могу изменить код так, чтобы был удален только первый элемент t, а l оставался неизменным во всем?

1 Ответ

0 голосов
/ 14 июля 2020

Попробуйте следующий код:

l=[1, 2, 3, 4, 5, 6, 7, 8]

for i in range(4):
    
    t=l.copy()
    print(t)
    print(l)
    del t[0]

При работе с этим списком, когда мы назначаем список другой переменной. мы фактически создаем еще одну ссылку из того же списка. Следовательно, в памяти будет только один список с двумя ссылочными переменными.

...