Pythonで大規模な配列のパフォーマンス(append編)

はじめに

Pythonで大規模な追記を扱う時に、どの型を使うと早いのか、パフォーマンスを調べてみる。ちなみにPythonは3.2を使用。

list

まずは定番のlist型

l = [1,2,3]
for i in range(10**7):
    l.append(i)

5.7秒、1.6GB

set

早いと評判のset型

s = set([1,2,3])
for i in range(10**7):
    s.add(i)

6.4秒、2.4GB

一応こんなのも試す

s = set([1,2,3])
for i in range(10**7):
    s |= set([i])

14.6秒、2.4GB。意味無かったかも。オブジェクトを無駄に生成してるし

array

速そうなarray型

from array import array
a = array('i', [1,2,3])
for i in range(10**7):
    a.append(i)

6.8秒、186MB。メモリ効率はいいけど遅いかなー

dict

ネタでdict型かと思いきや

d = {1:1, 2:2, 3:3}
for i in range(10**7):
    d[i] = i

6.2秒、3.1GB。思ったより早いw

結論

なんか正直どれでもいいような><。サイズが大きいので、メモリアクセスがネックになってて、どうでも良いのかもしれない