Итерация в списках Python - копирует или использует итератор?

У меня есть такой список

a = [ [ 1,2,3 ], [ 4,5,6] ]

Если я напишу

for x in a:
    do something with x

Является ли первый список из a скопированы в x? Или python делает это с помощью итератора без дополнительного копирования?

3 ответа

Python не копирует элемент из a в x. Это просто относится к первому элементу а как х. Это означает: когда вы изменяете x, вы также изменяете элемент a.

Вот пример:

>>> a = [ [ 1,2,3 ], [ 4,5,6] ]
>>> for x in a:
...     x.append(5)
... 
>>> a
[[1, 2, 3, 5], [4, 5, 6, 5]]

for element in aList: делает следующее: создает метку с именем element который относится к первому элементу списка, затем ко второму... пока не достигнет последнего. Он не копирует элемент в списке.

Пишу x.append(5) изменит элемент. Пишу x = [4, 5, 6] будет только перепроверить x метка для нового объекта, так что это не повлияет a,

Во-первых, это изменяемые списки [1, 2, 3]не неизменяемые кортежи (1, 2, 3),

Во-вторых, ответ заключается в том, что они не копируются, а передаются по ссылке. Так что в случае изменяемых списков, если вы измените значение x в вашем примере a также будет изменен

Другие вопросы по тегам