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

时间:2012-04-07 13:33:43

标签: python list iteration name-binding

我有一个像这样的列表

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

如果我写

for x in a:
    do something with x

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

3 个答案:

答案 0 :(得分:9)

Python不会将项目从a复制到x中。它只是指a作为x的第一个元素。这意味着:当你修改x时,你也修改了。

的元素

以下是一个例子:

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

答案 1 :(得分:4)

首先,这些是可变列表[1, 2, 3],而不是不可变的元组(1, 2, 3)

其次,答案是它们不会被复制,而是通过引用传递。因此,对于可变列表的情况,如果您在示例中更改x的值,则a也将被修改。

答案 2 :(得分:4)

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

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