Итерация в списках 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
также будет изменен