dck*_*ney 5 python memory dictionary
我一直在研究一个涉及从文件中将相对较大的字典加载到内存中的项目.字典的条目不到200万条,每个条目(键和值组合)不到20个字节.磁盘上文件的大小为38 MB.
我的问题是,当我尝试加载字典时,我的程序立即扩展到超过2.5千兆字节的内存使用.
这是我用来从磁盘读取字典的代码:
f = open('someFile.txt', 'r')
rT = eval(f.read())
f.close()
Run Code Online (Sandbox Code Playgroud)
我认为内存用于解析字典语法AST.
对于这种用途,如果你选择cPickle模块而不是使用repr
/ 更好eval
.
import cPickle
x = {}
for i in xrange(1000000):
x["k%i" % i] = "v%i" % i
cPickle.dump(x, open("data", "wb"), -1)
x = cPickle.load(open("data", "rb"))
Run Code Online (Sandbox Code Playgroud)
-1
当转储意味着使用更高效但可能不与旧版python版本向后兼容的最新协议.如果这是一个好主意,取决于你需要转储/加载的原因.