0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonの二次元配列初期化時にはまったり、リスト内包表記を覚える

Last updated at Posted at 2023-07-18

はじめに

二次元配列を初期化後、値を入れているはずの行に値が入っていることがあり、調べた末に納得できたので覚書

初めに書いたコード

matrix = [[0] * 3] * 3
matrix[1][1] = False
print(matrix)
# [[0, False, 0], [0, False, 0], [0, False, 0]]

二行目の二番目変えたつもりなのに、一行目と三行目も変わっていて、しばらく悩む。そのうち、[[0] * 3]が同じオブジェクトのままで3掛けてmatrixに代入しているからと気付き、下に修正する。

修正したコード

matrix = [[0] * 3 for i in range(3)]
matrix[1][1] = False
print(matrix)
# [[0, 0, 0], [0, False, 0], [0, 0, 0]]

リスト内包表記(List comprehensions)で書くと、新しいオブジェクトとして生成されるので想定の挙動にすることができた

おわりに

共有渡しはこういうところでつまづく。引っかかるのはいいとして、すぐ気づけるようになろう

参考

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?