python - 将内存中的变量保存到文件中

标签 python dictionary pickle

我有一个 2280 字节的字典,根据

sys.getsizeof(myDictionary)

当我用 pickle 将其保存到文件时

with open("dictionary.txt", "wb") as fp:   #Pickling
    pickle.dump(myDictionary, fp)

大小突然变成了 100KB 左右

我是否可以获取该字典的精确二进制表示并将其保存到文件中? 然后再次以字典形式访问该文件?

或者如果不可能,也许可以使用另一种编程语言?该文件尽可能小很重要

最佳答案

引自 docs关于sys.getsizeof:

Only the memory consumption directly attributed to the object is accounted for, not the memory consumption of objects it refers to.

嗯,Python 中的对象经常引用其他对象,所以 getsizeof 在这里可能没有多大帮助。

例如:

>>> a = {'a': 1, 'b': 2}
>>> sys.getsizeof(a)
240 # WUT
len(pickle.dumps(a))
28 # looks legit

然后执行:

>>> p = [1,2,3,4,5]
>>> a['k'] = p
>>> sys.getsizeof(a)
240 # WUT
>>> len(pickle.dumps(a))
51 # looks legit

因此,显然,该对象消耗的内存量取决于表示形式。如果您只想保存字典,那么,您将不得不只保存一堆基本上无处可去的指针(因为当您加载保存的数据时,它们将无效)。您可以使用this recursive recipe查找对象及其内容的大小。

如果您希望文件尽可能小,请考虑压缩字典中的值或使用不同的数据表示形式。

关于python - 将内存中的变量保存到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47660041/

相关文章:

python - 在 numpy 数组中从末尾切片可变距离的更多 Pythonic 方法

hadoop - hadoop map-reduce作业因初始化失败而崩溃:java.io.IOException:拆分元数据大小超过10000000。

python - 动态特性无法在 pickle 中存活

python - 如何构建可以在 Web UI 上运行的 Python 脚本

python - 使用 Freebusy 到 'primary' 以外的其他日历

Python:如何将信息从 .csv 文件导入到 python 作为一个包含元组的列表?

c++ - VS 2017错误C2664 map 插入尝试

c++ - 在 C++ Builder XE2 中使用 TDictionary

python - 无法 pickle <type 'function' > : attribute lookup __builtin__. 函数失败

python - pickle.load - EOFError : Ran out of input