質問: [[0,0,0],[0,0,0],[0,0,0]] として同じことをやると # [[0, 1, 0], [0, 0, 0], [0, 0, 0]] となってくれて期待通りに動いてくれます。 が、これだとノードの数がわかっても動的に隣接行列を初期化できないためこの方法はとりたくない。 ``` よろしくおねがいします。
回答: 以下のようにfor文等でappendを必要な回数繰り返されたらどうでしょうか? ※すみません、pythonらしい書き方を知りません。 ※提示されているAとBの様子(構造)の違いを表示させたかったのですが、当然、typeではどうにもならず。でした。 追記: 以下のようにid()関数で、確認できるようです。 A[0]とA[1]は、同じものである、idが同じであることがわかります。 イミュータブル等の説明で、こうなることは、一部、納得できる。 >>> A=[[0]*3]*3 >>> A [[0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> id(A[0]) 1639979327816 >>> id(A[1]) 1639979327816 >>> 参考: ※元の現象は、listの__mul__()のコードを見れば理解できるのかもしれません。 ``` >>> out_a = [] >>> req_n = 5 >>> for x in range(0,req_n-1): ... out_a.append([0,0,0]) ... >>> out_a [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> out_a[0][1] = 1 >>> out_a [[0, 1, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> ```