1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[python]いい加減覚えろ pythonで配列作るときの注意

Last updated at Posted at 2019-08-27

#あれ…これでいいんだっけ…?

pythonで配列書くとき、何かの場合でミスると配列そのものがコピーされちゃって面倒なことになることだけは覚えてるんですけど、それがどういう場合か覚えてないのでまとめます

#基本は内包表記さえすればいい
この通りで、1次元にしても2次元にしてもとりあえず内包表記にしておけばいい。

1次元の場合
こちらはそこまで心配する必要はなく、初期化の際には

list1=[0]*10
list2=[0 for i in range(10)]

のどちらでも構わない。

2次元の場合
これが注意するべきポイントで、

list1=[[0]*5]*3

とすると終わりである。なぜならここでは、全く同じものを指している[0]*5が3つ生まれただけなので、どれかを変更すると全て変更されてしまうからである。

したがって、2次元の場合、内包表記が優先されるべきであり、

list1=[[[0] for i in range(5)] for j in range(2)]

と書くべきっぽい。

###追記(2019/8/27)
コピーするときは

b=a.copy()

でokだそうです。ありがとうございます。

1
1
1

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?