2012-04-07 37 views

回答

9

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]] 
+2

爲了明確地迴應「Python是否用迭代器做到這一點」,答案是肯定的,但是Python迭代器並不像C++迭代器,並且'x'不是副本的事實是分開的 - if你要做'x = a [1]'它也不會複製。 – agf 2012-04-07 13:46:30

4

首先,這些都是可變的名單[1, 2, 3],不是一成不變的元組(1, 2, 3)

其次,答案是他們不被複制,但通過引用傳遞。因此,對於可變列表的情況,如果您在示例中更改了x的值,那麼a也將被修改。

+0

雖然這與Python的功能很接近,但它並不是通過引用傳遞的。並且要小心說「改變x的值」,因爲「x = 3」不會修改「a」。 – agf 2012-04-07 13:48:57

+0

謝謝你的澄清。 – mVChr 2012-04-07 13:51:25

+0

感謝您的糾正。我用元組混淆列表。 – smilitude 2012-04-07 15:16:33

4

for element in aList:會執行以下操作:它會創建一個名爲element的標籤,該標籤引用列表中的第一項,然後第二個...直到到達最後一個。它不會複製列表中的項目。

寫作x.append(5)將修改該項目。編寫x = [4, 5, 6]只會將x標籤重新綁定到新對象,因此它不會影響a