大富豪@python
なんか最近書いているPythonコードが異常にメモリを食ってた。調べてみると適当に二次元配列作ってる部分がやばいらしい
いくつかの方法で二次元配列を作ってメモリ使用量を比較。
import sys from resource import * from numpy import * import gc gc.disable() N = 2000 sz0 = (float( getrusage(RUSAGE_SELF)[6]*getpagesize() )/(1024*1024*1024)) #### as = dict() for i in xrange(N): for j in xrange(N): as[(i,j)] = True sz1 = (float( getrusage(RUSAGE_SELF)[6]*getpagesize() )/(1024*1024*1024)) #### bs = dict() for i in xrange(N): bs[i] = dict() for j in xrange(N): bs[i][j] = True sz2 = (float( getrusage(RUSAGE_SELF)[6]*getpagesize() )/(1024*1024*1024)) #### cs = [[True for i in xrange(N)] for j in xrange(N)] sz3 = (float( getrusage(RUSAGE_SELF)[6]*getpagesize() )/(1024*1024*1024)) #### ds = zeros((N,N) , dtype=bool) sz4 = (float( getrusage(RUSAGE_SELF)[6]*getpagesize() )/(1024*1024*1024)) print "%f[GB],%f[GB],%f[GB],%f[GB]" % ((sz1-sz0),(sz2-sz1),(sz3-sz2),(sz4-sz3))
実行結果
0.736668[GB],0.454918[GB],0.030876[GB],0.003723[GB]
一桁くらいずつの違いが。実際に走らせているコードでは、Nが10万超えることがあるので、75GBくらいメモリを使ってるやつがいる。なんという大富豪プログラミング。