このようなリストがあります
a = [ [ 1,2,3 ], [ 4,5,6] ]
私が書いたら
for x in a:
do something with x
からの最初のリストは にa
コピーされていx
ますか? それとも、Pythonは余分なコピーを行わずにイテレータでそれを行いますか?
このようなリストがあります
a = [ [ 1,2,3 ], [ 4,5,6] ]
私が書いたら
for x in a:
do something with x
からの最初のリストは にa
コピーされていx
ますか? それとも、Pythonは余分なコピーを行わずにイテレータでそれを行いますか?
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]]
は次のfor element in aList:
ことを行います。リストの最初の項目を参照するという名前のラベルを作成しelement
、最後に到達するまで2番目の...を作成します。リスト内のアイテムはコピーされません。
書くx.append(5)
とアイテムが変更されます。書き込みはラベルを新しいオブジェクトにx = [4, 5, 6]
再バインドするだけx
なので、影響はありませんa
。
まず、これらは変更可能なリスト[1, 2, 3]
であり、不変のタプルではありません(1, 2, 3)
。
第二に、答えは、それらはコピーされず、参照によって渡されるということです。したがって、変更可能なリストの場合、x
例の値を変更するa
と、同様に変更されます。