python リスト 初期化

python リストの罠。

配列の初期化を以下のように行うとidが全部同じになってしまう。
結果、変更したくない部分まで変更される。


//コード
a = [[]]*3

for i in range(3):
   print (id(a[i]))

a[0].append("Hello")

for i in range(3):
   print (a[i])

//実行結果
4570663368
4570663368
4570663368
['Hello']
['Hello']
['Hello']

配列の初期化方法を変える。


//コード
a = [[] for i in range(3)] //変更

for i in range(3):
   print (id(a[i]))

a[0].append("Hello")

for i in range(3):
   print (a[i])

//実行結果
4570519624
4570519432
4570519176
['Hello']
[]
[]

神。