¿Rendimiento al pasar una lista enorme como argumento en función recursiva?

Estoy usando Python y tengo una función recursiva que toma una lista enorme como uno de los argumentos:

# Current implementation def MyFunction(arg1, arg2, my_huge_list) ... ... MyFunction(new_arg1, new_arg2, my_huge_list) 

Como puede ver arriba, MyFunction se llama recursivamente utilizando la misma lista my_huge_list ; Esto no cambia, a diferencia de los otros argumentos. Y, de nuevo, esta lista es enorme. Un amigo mío sugirió que podría tratar my_huge_list como una variable global para mejorar el rendimiento, ya que de lo contrario esta enorme lista se puede copiar una y otra vez en cada iteración.

 # Friend's suggestion MyHugeList=[a,b,c, ...and many many other elements... ] def MyFunction(arg1, arg2) global MyHugeList ... ... MyFunction(new_arg1, new_arg2) 

¿El uso de una variable global como se muestra arriba mejora el rendimiento del algoritmo sobre la versión original? Mi progtwig se ejecuta durante semanas, por lo que incluso una leve mejora puede ser valiosa a largo plazo.

La lista se pasará por referencia, por lo que no se tarda más en transferir una lista de 1 elemento en lugar de una lista de 100000 elementos:

 def null(x): return x longlist = range(100000) shortlist = range(1) longerlist = range(1000000) %timeit null(shortlist) 10000000 loops, best of 3: 124 ns per loop %timeit null(longlist) 10000000 loops, best of 3: 137 ns per loop %timeit null(longerlist) 10000000 loops, best of 3: 125 ns per loop 

Las listas más largas tienen entradas de 100k y 1M, y sin embargo, no tardan mucho en pasar como argumentos que en listas más cortas.

puede haber otras formas de mejorar el rendimiento; Probablemente este no sea uno de ellos.

No, los argumentos en Python se pasan por referencia.
Más precisamente: las variables en Python son solo unos indicadores que almacenan las direcciones de memoria de los datos reales. Entonces, cuando el puntero variable de Pythons pasa a una función (pasa por su valor), la dirección apunta a los datos reales, significa que, las variables pasadas a funciones por valor y el valor de las variables son referencias a objetos.

Más sobre ese tema: