RubyIntermedio2 nov 2025
¡La Multiplicación de Arrays en Ruby Es Más Tramposa de lo Que Parece!
snippet.ruby
original_array = [[]]
multiplied_array = original_array * 3
multiplied_array[0] << "Oops!"
puts multiplied_array.inspect¿Qué crees que imprime?
✅ Salida Esperada
[["Oops!"], [], []]⚠️ Salida Real
[["Oops!"], ["Oops!"], ["Oops!"]]¿Por qué pasa esto?
¡Qué pasa aquí, Ruby! 🤯 Uno esperaría que al multiplicar un array `[[]]` por 3, obtendríamos tres arrays internos **independientes**. Pero no, Ruby tiene sus propias reglas para esta fiesta: ¡es una **copia superficial**! 🕺
Imagina que tienes una caja de juguetes `original_array` y dentro solo hay un perrito 🐶. Cuando dices `original_array * 3`, no estás creando tres cajas con tres perritos nuevos y únicos. ¡Estás creando tres cajas, y cada una tiene una **referencia al MISMO perrito**! Si le pones un sombrerito a ese perrito en una de las cajas (`multiplied_array[0] << "Oops!"`), ¡sorpresa! Todas las cajas muestran al perrito con el mismo sombrerito. 🎩🐕
Ruby duplica la **referencia al objeto interno**, no el objeto en sí. Para una copia "profunda" (deep copy), tendrías que clonar cada elemento individualmente.
Conceptos relacionados
referencesshallow-copyarray-multiplication