我有這樣在Python列表中迭代 - 是否複製或使用迭代器?
a = [ [ 1,2,3 ], [ 4,5,6] ]
列表如果我寫
for x in a:
do something with x
是從a
第一個列表複製到x
?或者python用迭代器做這件事,而不做任何額外的複製?
我有這樣在Python列表中迭代 - 是否複製或使用迭代器?
a = [ [ 1,2,3 ], [ 4,5,6] ]
列表如果我寫
for x in a:
do something with x
是從a
第一個列表複製到x
?或者python用迭代器做這件事,而不做任何額外的複製?
Python不會將項目從a複製到x中。它只是指一個as的第一個元素。這意味着:當你修改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
。
爲了明確地迴應「Python是否用迭代器做到這一點」,答案是肯定的,但是Python迭代器並不像C++迭代器,並且'x'不是副本的事實是分開的 - if你要做'x = a [1]'它也不會複製。 – agf 2012-04-07 13:46:30