AD

¿Ya dominas lo básico? Un curso estructurado de Ruby es la vía rápida para dar el salto.

Ver cursos de Ruby en Udemy

Enlace de afiliado. No te cuesta nada extra.

💎Lecciones de Ruby
Lección 40 / 68

Copia superficial y copia profunda

En esta lección verás por qué copiar una estructura no siempre copia lo que hay dentro.

dup hace una copia superficial: crea un objeto nuevo, pero los objetos anidados siguen siendo los mismos. Por eso modificar la ciudad dentro de la copia cambia también la del original.

El código de ejemplo lo demuestra, y después hace una copia profunda pasando por JSON, que reconstruye toda la estructura desde cero.

Este es uno de los fallos más difíciles de encontrar, porque el síntoma aparece lejos de la causa: un objeto cambia y nadie parece haberlo tocado. Cuando veas ese comportamiento, sospecha de una copia superficial.

El truco del JSON es cómodo y tiene límites claros: solo funciona con datos que JSON sabe representar. Las fechas se convierten en texto, los símbolos también, y los objetos de clases propias no sobreviven. Para casos generales se usa Marshal.load(Marshal.dump(objeto)). La alternativa más robusta, sin embargo, es no modificar nada: si trabajas con datos inmutables, la pregunta de cómo copiarlos deja de existir.

📖 Código de referencia
✍️ Tu código
Escribe tu código y pulsa «Ejecutar»

🧪 Este sitio no puede compilar ni ejecutar Ruby directamente, así que comprueba al instante si lo que escribiste coincide con el código de referencia (la corrección ocurre por completo en tu navegador; no se envía nada a ningún servidor).

🔗 El mismo tema en otros lenguajes

Mira cómo se escribe lo mismo en otro lenguaje.

Espacio publicitario (banner)
Espacio publicitario (en el artículo)