我见过很多与此类似的问题,但没有一个真正匹配的问题。大多数其他问题似乎与速度有关。我遇到的是一个 json 字典,它位于我本地机器上的一个 1.1gig 文件中,当我尝试使用以下任何内容加载它时,它占用了我所有的 16 GB 内存:
f = open(some_file, "rb")
new_dictionary = json.load(f)
无论我使用什么 json 库(我尝试过 ujson、json、yajl),无论我是否将内容作为字节流读取,都会发生这种情况。这对我来说完全没有意义。疯狂的内存使用是怎么回事,我该如何解决?
如果有帮助,字典只是一堆嵌套字典,它们都具有指向其他整数的整数。示例如下所示:
{"0":{"3":82,"4":503,"15":456},"956":{"56":823,"678":50673,"35":1232}...}
更新:当我使用 simplejson 运行它时,它实际上只占用了 8 个演出。不知道为什么那个比其他所有占用的要少得多。
更新2:所以我做了更多调查。我用 simplejson 加载了我的字典,并尝试将所有键转换为整数(根据 Liori 的建议,字符串可能会占用更多空间)。空间在 8 场演出时保持不变。然后我尝试了 Winston Ewert 关于运行 gc.collect() 的建议。空间仍然保持在 8 场演出。最后,又恼又好奇,我腌制了我的新数据结构,退出了 Python,然后重新加载。瞧,它仍然需要 8 个演出。我猜 Python 只是想要这么大的空间来存放一个大的 2d 字典。当然令人沮丧,但至少现在我知道这不是 JSON 问题,只要我使用 simplejson 加载它。