最简单的解决方案:您可能用完了虚拟地址空间(任何其他形式的错误通常意味着运行很长时间很慢,直到最终获得MemoryError
)。这是因为Windows(和大多数OS)上的32位应用程序限制为2 GB的用户模式地址空间(可以将Windows调整为3 GB,但这仍然是一个较低的上限)。您有8 GB的RAM,但是您的程序无法使用(至少)其中的3/4。Python的每对象开销很大(对象标头,分配对齐等),赔率是单独的字符串使用的内存接近GB,这是在处理字典开销之前,其余的您的程序,Python的其余部分,等等。如果内存空间足够碎片,并且字典需要增长,则它可能没有足够的连续空间来重新分配,您将得到一个MemoryError
。
安装64位版本的Python(如果可以,出于其他原因,我建议升级到Python 3);它会使用更多的内存,但随后,它会 进入 到一个 很大 更多的存储空间(并物理RAM以及)。
如果这还不够,请考虑转换为sqlite3
数据库(或其他数据库),这样当数据对于主内存来说太大时,它自然会溢出到磁盘上,同时仍然具有相当高效的查找。