ハマったメモ*Python

気ばらしにPythonで何かを書いていた。メモ。

m行n列な多次元配列を作って、配列の中身をいじりたかった。

#5x3の、要素を0で初期化した多次元配列を作りたい。
In [44]: d=[[0]*3]*5

#多次元配列できた。
In [45]: d
Out[45]: [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

#(1,2)成分に1を代入したい。
In [46]: d[1][2]=1

#...違う。
In [47]: d
Out[47]: [[0, 0, 1], [0, 0, 1], [0, 0, 1], [0, 0, 1], [0, 0, 1]]
In [68]: d=[]

In [69]: for n in range(5):
   ....:     d.append([0]*3)
   ....: 

In [70]: d
Out[70]: [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

#(1,2)成分に1を代入
In [71]: d[1][2]=1

#できた.
In [72]: d
Out[72]: [[0, 0, 0], [0, 0, 1], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

つまり...

d=[[0]*3]*5
#は,
d=[[0]*3,[0]*3,[0]*3,[0]*3,[0]*3]
#じゃなくて,
a=[[0]*3]
d=[a,a,a,a,a]
#と同等というコト。

そりゃあ..そうか。そりゃ、そうか?
文法がまだよく分かってないけれど、もっと上手く多次元配列を作る方法はあるのかもしれない。
new hoge...みたいな何かがあれば.(なんかこのエントリ頭悪いな)