我已经看到了很多类似的问题,但没有真正匹配的问题.大多数其他问题似乎与速度有关.我正在经历的是一个单独的json字典,它位于我本地盒子上的1.1gig文件中,当我尝试使用以下任何内容加载它时占用我所有的16 GB内存:
f = open(some_file, "rb")
new_dictionary = json.load(f)
Run Code Online (Sandbox Code Playgroud)
无论我使用什么json库(我已经尝试过ujson,json,yajl),无论我是否以字节流的形式读取内容,都会发生这种情况.这对我来说完全没有意义.什么是疯狂的内存使用,我如何解决它?
如果它有帮助,字典只是一堆嵌套字典,所有内容都指向其他整数.示例如下:
{"0":{"3":82,"4":503,"15":456},"956":{"56":823,"678":50673,"35":1232}...}
Run Code Online (Sandbox Code Playgroud)
更新:当我用simplejson运行它时,它实际上只需要8次演出.不知道为什么那个人比其他人占用的少得多.
更新2:所以我做了更多调查.我用simplejson加载了我的字典,并尝试将所有键转换为int(根据Liori的建议,字符串可能会占用更多空间).8演出的空间保持不变.然后我尝试了Winston Ewert建议运行gc.collect().空间仍然是8演出.最后,烦恼和好奇,我腌制我的新数据结构,退出Python,并重新加载.瞧,它仍然需要8演出.我想Python只是想要一个大的2d字典的空间.令人沮丧,当然,但至少现在我知道这不是JSON问题,只要我使用simplejson加载它.
加布确实在评论中弄清楚了这一点,但由于已经几个月了,他还没有将其作为答案发布,我想我应该回答我自己的问题,所以后代会看到有一个答案。
不管怎样,答案是二维字典在 Python 中只占用那么多空间。这些字典中的每一个最终都会产生一些空间开销,并且由于字典数量很多,它会从 1.1 GB 增加到 8 GB,除了尝试使用不同的数据结构或获取更多空间之外,您对此无能为力。内存。
| 归档时间: |
|
| 查看次数: |
1885 次 |
| 最近记录: |