序列化类实例以进行比较

时间:2016-06-06 15:56:07

标签: python serialization version-control pickle

我有一个正在处理项目的应用程序。这些项目目前存储为pickle,使用

生成
cPickle.dump(project, open(filename, 'wb'), HIGHEST_PROTOCOL)

这些项目文件需要是可扩展的,因为它们在版本控制环境中使用。 问题是,如果我序列化完全相同的对象,那么pickle每次都会变得不同。 0作为协议工作,但我需要文件更小(协议0约为12MB)。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,如果有人在将来有同样的问题,我会在这里发布。

解决方案是在对象进行酸洗之前直接对对象进行深度检查。 这样,当使用HIGHEST_PROTOCOL时,显然导致差异的引用计数被重置并且文件结果相同。
而不是

cPickle.dump(instance, open(filename, 'wb'), HIGHEST_PROTOCOL)

你需要这样做:

from copy import deepcopy
cpy = deepcopy(instance)
cPickle.dump(cpy, open(filename, 'wb'), HIGHEST_PROTOCOL)
cpy = None

这样,文件大小显着减少,同时仍保持可比性。