Pythonの配列の作り方の違いによる挙動の変化について
Pythonで隣接行列を表現しようとしたら2次元配列が期待と異なる挙動をしてしまったため、どういう理由でこういう挙動になったのか?どうするのがよいのか?の二点を質問させてください。
やりたいこと
無向グラフを隣接行列で表現したい。
リンクが有るところは1で、ないところは0にしたい。
最初にノードの数がわかるので、0で2次元配列Aを初期化したい。
初期化の方法で下記のAのような方法をとった。
挙動
A = [[0] * 3] * 3
# A = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
試しに1つだけリンクを追加してみる
A[0][1] = 1
# [[0, 1, 0], [0, 1, 0], [0, 1, 0]]
期待する動作
A[0][1] = 1としたら、
[[0, 1, 0], [0, 0, 0], [0, 0, 0]]
となると期待
(ちなみに)
B = [[0,0,0],[0,0,0],[0,0,0]]
として同じことをやると
# [[0, 1, 0], [0, 0, 0], [0, 0, 0]]
となってくれて期待通りに動いてくれます。
が、これだとノードの数がわかっても動的に隣接行列を初期化できないためこの方法はとりたくない。
よろしくおねがいします。