5

このようなリストがあります

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

私が書いたら

for x in a:
    do something with x

からの最初のリストは にaコピーされていxますか? それとも、Pythonは余分なコピーを行わずにイテレータでそれを行いますか?

4

3 に答える 3

10

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]]
于 2012-04-07T13:37:07.467 に答える
4

は次のfor element in aList:ことを行います。リストの最初の項目を参照するという名前のラベルを作成しelement、最後に到達するまで2番目の...を作成します。リスト内のアイテムはコピーされません。

書くx.append(5)とアイテムが変更されます。書き込みはラベルを新しいオブジェクトにx = [4, 5, 6]再バインドするだけxなので、影響はありませんa

于 2012-04-07T15:41:54.830 に答える
4

まず、これらは変更可能なリスト[1, 2, 3]であり、不変のタプルではありません(1, 2, 3)

第二に、答えは、それらはコピーされず、参照によって渡されるということです。したがって、変更可能なリストの場合、x例の値を変更するaと、同様に変更されます。

于 2012-04-07T13:37:23.903 に答える