将变量保存在内存中的文件

时间:2017-12-05 18:08:13

标签: python dictionary pickle

根据

,我有一个2280字节的字典
sys.getsizeof(myDictionary)

当我将它保存到带有泡菜的文件

with open("dictionary.txt", "wb") as fp:   #Pickling
    pickle.dump(myDictionary, fp)
它突然大约100KB

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

或者如果不可能,可能使用其他编程语言吗?让文件尽可能小是很重要的

1 个答案:

答案 0 :(得分:1)

引用docs关于sys.getsizeof

  

只考虑直接归因于对象的内存消耗,而不是它所引用的对象的内存消耗。

嗯,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查找对象及其内容的大小。

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