Si tengo los objetos a
y b
y ambos objetos de referencia obj
, ¿qué sucede cuando salmuera y luego restauro los objetos? ¿Los datos en escabeche 'sabrán' que a
y b
hicieron referencia al mismo objeto y restauraron todo en consecuencia, o los dos obtendrán dos objetos diferentes — e inicialmente iguales —?Puede salmuera manejar múltiples referencias de objetos
Respuesta
Sí, los objetos compartidos solo se serializarán una vez (el protocolo pickle puede incluso manejar referencias circulares).
Desde el documentation:
El módulo
pickle
realiza un seguimiento de los objetos que ya ha en serie, por lo que las referencias posteriores al mismo objeto no serán serializados de nuevo.marshal
no hace esto.Esto tiene implicaciones tanto para objetos recursivos como para compartir objetos. Los objetos recursivos son objetos que contienen referencias a ellos mismos. Estos no son manejados por
marshal
, y de hecho, al tratar de ordenar objetos recursivos se bloqueará su intérprete de Python. El intercambio de objetos ocurre cuando hay varias referencias al mismo objeto en lugares diferentes en la jerarquía de objetos que se serializa.pickle
almacena dichos objetos solo una vez y garantiza que todas las otras referencias apuntan a la copia maestra. Los objetos compartidos permanecen compartidos, lo que puede ser muy importante para objetos mutables.
Como señala @aix, pickle
comprende múltiples referencias al mismo objeto, pero solo dentro de un único decapado. Es decir, pickle siempre encurtirá un solo objeto. Si ese objeto tiene referencias dentro de él, esas referencias se compartirán correctamente en el objeto sin descodificar.
Pero si llama a Pickle dos veces, para extraer dos objetos, las referencias compartidas entre los objetos no se conservarán correctamente. El objeto ahora existirá dos veces.
- 1. Objetos vinculados a salmuera
- 2. Buen estilo de programación al manejar objetos múltiples
- 3. Vectores de referencias a objetos
- 4. Tabla de referencias cruzadas con elementos múltiples
- 5. la salmuera de clases personalizadas
- 6. ¿WcfTestClient.exe no puede manejar la referencia circular?
- 7. referencias débiles y objetos desechables
- 8. ¿Cómo manejar referencias circulares con Autofac 2.4.5?
- 9. in_array en objetos con referencias circulares
- 10. Cómo manejar múltiples delegados
- 11. ¿Cuál es la mejor forma de manejar múltiples dependencias de objetos en C++?
- 12. Recuento de referencias para los objetos
- 13. mejor manera de manejar múltiples NSTableView (s)
- 14. Problema con WCF y múltiples espacios de nombres: compartiendo tipos de objetos en múltiples referencias de servicio
- 15. ¿Cómo puedo rastrear referencias a objetos Perl?
- 16. C colección # basura con referencias a objetos
- 17. Mostrar objetos y referencias gráficamente en Python
- 18. Buenas Prácticas para Volviendo referencias a objetos
- 19. Objetos en el montón y referencias
- 20. Múltiples llamadas de WS en una acción, ¿cómo manejar los objetos Promesa?
- 21. función genérica para manejar desechar objetos IDisposable
- 22. ¿Puede GCC no quejarse de referencias indefinidas?
- 23. manejar múltiples peticiones con C# HttpListener
- 24. ¿Puede CoreData manejar subclases polimórficas?
- 25. Semantics de movimiento y referencias de referencias
- 26. ¿Puede sys.argv manejar argumentos opcionales?
- 27. .NET XmlSerializer y múltiples referencias al mismo objeto
- 28. java - ¿Cómo puede Garbage Collector saber rápidamente qué objetos ya no tienen referencias?
- 29. PHP Sesiones para manejar múltiples servidores
- 30. ¿Cómo manejar múltiples recursos anidados en ActiveAdmin?
Eso es genial. :RE –