在Python列表中迭代 - 它是复制还是使用迭代器?

smi*_*ude 4 python iteration list name-binding

我有这样的清单

a = [ [ 1,2,3 ], [ 4,5,6] ]
Run Code Online (Sandbox Code Playgroud)

如果我写

for x in a:
    do something with x
Run Code Online (Sandbox Code Playgroud)

是否将第一个列表a复制到x?或者python是否使用迭代器执行此操作而不进行任何额外的复制?

Sim*_*ser 9

Python不会将项目从a复制到x.它只是指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]]
Run Code Online (Sandbox Code Playgroud)

  • 要显式响应"Python是否使用迭代器执行",答案是肯定的,但Python迭代器不太像C++迭代器,而且`x`不是副本的事实是独立的 - 如果你是做`x = a [1]`它也不会复制. (2认同)

Sim*_*got 5

for element in aList:执行以下操作:它创建一个名为的标签element,该标签引用列表的第一项,然后是第二项......直到到达最后一项。它不会复制列表中的项目。

写入x.append(5)将修改该项目。写入x = [4, 5, 6]只会将x标签重新绑定到新对象,因此不会影响a.