Saltar al contenido
Underc0de /foro

¿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.

Desarrollonivel junior#python#java#c-cpp

Respuesta

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.

Grupo de WhatsApp