我在名为b1.pkl的文件中有一个 pickle 的对象:

$ ls -l b*
-rw-r--r--  1 fireball  staff  64743950 Oct 11 15:32 b1.pkl

然后,我运行以下python代码以加载对象并将其转储到新文件中:
import numpy as np
import cPickle as pkl

fin = open('b1.pkl', 'r')
fout = open('b2.pkl', 'w')

x = pkl.load(fin)
pkl.dump(x, fout)

fin.close()
fout.close()

此代码创建的文件大两倍以上:
$ ls -l b*
-rw-r--r--  1 fireball  staff   64743950 Oct 11 15:32 b1.pkl
-rw-r--r--  1 fireball  staff  191763914 Oct 11 15:47 b2.pkl

谁能解释为什么新文件比原始文件大得多?它应该包含完全相同的结构。

最佳答案

可能是原始的 pickle 使用了其他协议(protocol)。例如,尝试将protocol=2指定为第二个pickle.dump的关键字参数,然后再次对其进行测试。二元 pickle 的大小应该小得多。

关于python - 为什么python pickle加载和转储会使磁盘上对象的大小膨胀?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12849791/

10-09 20:19