序列化 class 个实例进行比较

serialize class instance for comparison

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

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

这些项目文件需要区分,因为它们在版本控制环境中使用。 问题是,如果我序列化完全相同的对象,泡菜每次都会不同。 0 因为协议有效,但我需要文件更小(协议 0 大约为 12MB)。

我找到了解决方案,我会post在这里,以防以后有人遇到同样的问题。

解决方案是在 pickle 之前直接对对象进行深层复制。 这样,显然导致差异的引用计数将被重置,并且在使用 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

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