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]