Copia profunda

Autor: Lewis Jackson
Fecha De Creación: 8 Mayo 2021
Fecha De Actualización: 25 Junio 2024
Anonim
Copia profunda con Numpy [Python]
Video: Copia profunda con Numpy [Python]

Contenido

Definición - ¿Qué significa Deep Copy?

Copia profunda, en C #, se refiere a una técnica mediante la cual se crea una copia de un objeto de modo que contenga copias de los miembros de la instancia y de los objetos señalados por los miembros de referencia.

La copia profunda está diseñada para copiar todos los elementos de un objeto, que incluyen elementos referenciados directamente (de tipo de valor) y los elementos referenciados indirectamente de un tipo de referencia que contiene una referencia (puntero) a una ubicación de memoria que contiene datos en lugar de contener el datos en sí. La copia profunda se usa en escenarios donde se crea una nueva copia (clon) sin ninguna referencia a los datos originales.


Una introducción a Microsoft Azure y la nube de Microsoft | A lo largo de esta guía, aprenderá de qué se trata la computación en la nube y cómo Microsoft Azure puede ayudarlo a migrar y administrar su negocio desde la nube.

Techopedia explica Deep Copy

La copia profunda difiere de la copia superficial en la forma en que se copian los miembros del tipo de referencia del objeto. Mientras se copian los miembros de campo de tipo de valor en ambos casos, se realiza una copia de campo bit por bit. Al copiar campos de tipo de referencia, la copia superficial implica copiar solo la referencia, mientras que en copia profunda, se realiza una nueva copia del objeto referido.

La copia profunda se puede ilustrar con un ejemplo considerando un objeto Empleado que tiene AddressInfo como miembro del tipo de referencia junto con otros miembros del tipo de valor. Una copia profunda de Employee crea un nuevo objeto, Employee2, con miembros de tipo de valor igual a Employee pero hace referencia a un nuevo objeto, AddressInfo2, que es una copia de AddressInfo.

La copia profunda se puede implementar utilizando cualquiera de los siguientes métodos:


  • El constructor de copias de la clase se puede implementar con la lógica necesaria para copiar miembros de los tipos de valor y referencia (después de la asignación de memoria adecuada). Este método es tedioso y propenso a errores.
  • El método System.Object.MemberwiseClone se puede utilizar para copiar los miembros no estáticos de tipo de valor.Se pueden crear y asignar copias de objetos de tipo de referencia con el mismo conjunto de valores que el original
  • Un objeto que debe ser copiado en profundidad puede ser serializado y deserializado en un nuevo objeto mediante su restauración. Este método es automático y no requiere cambios de código para modificaciones en los miembros del objeto, pero es más lento que otros métodos y requiere que el objeto clonado sea serializable
  • La reflexión con recursión se puede usar para obtener una copia superficial, en cuyo punto se puede agregar el código adicional necesario para una copia profunda. Este método está automatizado y no requiere cambios de código para agregar o eliminar campos en el objeto. Es más lento y no está permitido en un entorno de confianza parcial.
  • Se puede usar un código de idioma intermedio, que es más rápido pero da como resultado una menor legibilidad del código y un mantenimiento difícil

Para implementar una copia profunda:


  • El objeto tiene que estar bien definido y no puede ser arbitrario
  • Las propiedades del objeto no serán consideradas
  • La clonación debe automatizarse con inteligencia para casos especiales (como objetos que contienen referencias no administradas)