リストで2次元配列を初期化する必要があります。たとえば、2X3アレイの場合
:[[0,0,0], [0,0,0]]
Pythonで2dリストを初期化すると値間のリンクが得られます(同じアドレス)
最初の試みは:
In: a1 = [[0]*3]*2
In: a1[0][0] = 100
In: a1
Out: [[100,0,0], [100,0,0]]
これは奇妙です。だから私はチェックした:
In: a1 = [[0]*3]*2
In: id(a1[0][0])
Out: 4518461984
In: id(a1[1][0])
Out: 4518461984
同じアドレス。
第二の試み:
In: a2 =[[0]*3 for i in range(2)]
In: a2[0][0] = 100
In: a2
Out: [[100, 0, 0], [0, 0, 0]]
右。
は、私は再びメモリアドレスを確認してみましょう:
In: a2 =[[0]*3 for i in range(2)]
In: id(a2[0][0])
Out: 4518461984
In: id(a2[1][0])
Out: 4518461984
まあ、奇妙な。もう一度同じアドレス。私は異なる住所を期待していた。私の最初の推測では、返されるアドレスは値へのポインタのアドレスです。それでは、どのようにしてスロットのアドレスを取得できますか?
この現象を引き起こしたPythonの動作を説明できる人はいますか? Pythonでは、どちらがポインタで、どれが値であるかを知ることは非常に難しいと思います。
私はそれを読んだことがありますが、使用している*や範囲に応じてコピーが生成されるためです。 –
@Coldspeedのこのコメントは私の質問を解決しました。 '注釈として、変更可能な構造体で*を使用すると、それらの参照も同様に再利用されることに注意してください。 - Coldspeed' –