¿Qué diferencia hay entre una variable pasada por valor y por referencia? ¿Cómo funciona en el lenguaje que usás?
$ interview --rol dev
Evalúa conocimientos fundamentales sobre semántica de paso de parámetros, mutabilidad y cómo evitar efectos secundarios inesperados al modificar argumentos dentro de funciones.
Por valor: la función recibe una copia; si la modifica, el original no cambia. Por referencia: la función recibe un alias del original; modificarlo cambia la variable de quien llamó.
La sutileza es que muchos lenguajes populares (Java, Python, JavaScript, C#) pasan todo por valor, pero para los objetos ese valor es una referencia. Eso significa:
Si mutás el objeto (agregás un elemento a una lista), el cambio se ve afuera.
Si reasignás el parámetro a un objeto nuevo, el de afuera no cambia.
Código: python
def f(lista):
lista.append(4) # afecta al original
lista = [0] # solo cambia la variable local
x = [1, 2, 3]
f(x)
print(x) # [1, 2, 3, 4]
En otros lenguajes el paso por referencia es real y explícito: en C++ con & (void f(int& n)), en C# con ref/out, y en C se simula pasando punteros.
Por qué importa:
Evitar bugs por efectos secundarios: una función que modifica la lista que recibió y rompe a otro módulo.
Un clásico de Python: argumentos por defecto mutables (def f(x=[])) que se comparten entre llamadas.
Cuando necesito no tocar el original, hago una copia (copia superficial o profunda según el caso) o uso estructuras inmutables.
Rendimiento: en C++ paso objetos grandes por const& para evitar copias.
Errores comunes
Decir que Java o Python pasan objetos por referencia sin matizar. No distinguir entre mutar y reasignar. Ignorar la diferencia entre copia superficial y profunda.
Redactado con el asistente Underc0de IA. Actualizado el 13/11/2026. ¿Ves un error? Contanos en el foro.