serializar instancia de class para comparación

Tengo una aplicación que está trabajando con proyectos. Estos proyectos se almacenan actualmente como pepinillos, generados con

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

Estos files de proyecto deben ser difciles porque se usan en un entorno de control de versiones. El problema es que si serializo exactamente el mismo object, el pickle resulta diferente cada vez. 0 ya que el protocolo funciona, pero necesito que los files sean más pequeños (tienen alnetworkingedor de 12MB con protocolo 0).

Encontré la solución, la voy a publicar aquí en caso de que alguien tenga la misma pregunta en el futuro.

La solución es hacer una copy profunda del object directamente antes de ser escabechado. De esta forma, el recuento de references que aparentemente causa las diferencias se restablece y los files se vuelven iguales cuando se usa HIGHEST_PROTOCOL.
Entonces, en lugar de

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

Usted necesita hacer ésto:

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

De esta forma, el tamaño del file se networkinguce significativamente mientras se mantiene la comparabilidad.

    Intereting Posts