La diferencia entre en cualquier lenguaje de programacion entre pasar una variable por Valor o por referencia, reside en que cuando la pasamos por Valor, el sistema crea una copia de la variable para trabajar con lo que cualquier proceso se realiza con esta copia y no se modifica la original. En cambio cuando pasamos la variable por Referencia, se actua directamente sobre la variable, con lo que cualquier proceso afectara a la variable original.
Cuando trabajamos con python este proceso esta definido por el tipo de variable, si el dato es un valor, se pasara como tipo valor (x=10), pero en el caso de ser un lista o array (x=[30,20,10]), se pasara como tipo referencia.
podemos ver como funciona utilizando id() de python, cuando se trata de un VALOR:
x = 1
print(id(x))
def funcion(entrada):
entrada = 0
print(id(entrada))
funcion(x)
Resultado:
2654649319664
2654649319632
Y de una REFERENCIA:
x = [1, 2, 3]
print(id(x))
def funcion(entrada):
entrada.append(4)
print(id(entrada))
print(entrada)
funcion(x)
Resultado:
2654650706688
2654650706688
[1, 2, 3, 4]