Pythonで2次元配列を作って更新させた際に、納得できない結果になりました。
解決したいこと
Python初心者です。Pythonで2次元配列を作って更新させた際に、納得できない結果になりました。この理由がわかる方教えて頂きたいです。
ちなみに、Pythonのバージョンは、「3.10」を使っています。
作成したコード
#2次元配列を定義して0で初期化
q = [[0]*3]*3
for a in q:
print(*a)
print("-----")
#(0,0)の要素を1つだけ更新
q[0][0] = 1
for a in q:
print(*a)
結果↓
0 0 0
0 0 0
0 0 0
-----
1 0 0
1 0 0
1 0 0
他の要素まで更新されてしまっています。
「*」で増幅させるとオブジェクトが同じになるから???とか??
だとしたら、全項目「1」になりそうなもんだと思うのですがねぇ(。´・ω・)?
期待する結果↓
0 0 0
0 0 0
0 0 0
-----
1 0 0
0 0 0
0 0 0
配列の作り方を↓のようにすることで期待する結果になりました。
修正後のコード
#2次元配列を定義して0で初期化
q = [[0 for i in range(3)] for j in range(3)] #←※ここを修正
for a in q:
print(*a)
print("-----")
#(0,0)の要素を1つだけ更新
q[0][0] = 1
for a in q:
print(*a)
結果↓
0 0 0
0 0 0
0 0 0
-----
1 0 0
0 0 0
0 0 0
何故に、「q = [[0]*3]*3」だと、他の項目まで更新されてしまうのか、、
分かる方教えてくださいm(__)m
0