jun_higuche
@jun_higuche (Junichi Higuchi)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

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

2Answer

Comments

  1. @jun_higuche

    Questioner

    ありがとうございます m(_ _)m
    「*」使うと参照になっているのですね。
    理解しました。

Comments

  1. @jun_higuche

    Questioner

    とても分かりやすいですね!ありがとうございますm(__)m

Your answer might help someone💌