He estado corriendo scripts de Python que hacen varias llamadas a algunas funciones, digo F1 (x) y F2 (x), que se ven un poco como esto:Memoria estática en python: ¿los bucles crean nuevas instancias de variables en la memoria?
x = LoadData()
for j in range(N):
y = F1(x[j])
z[j] = F2(y)
del y
SaveData(z)
El rendimiento es mucho más rápido si sigo la línea "del y" Pero no entiendo por qué esto es verdad. Si no uso "del y", entonces rápidamente me quedo sin RAM y tengo que recurrir a la memoria virtual, y todo se ralentiza. Compre si uso "del y", entonces estoy enjuagando repetidamente y reasignando la memoria para y. Lo que me gustaría hacer es sentarme como memoria estática y reutilizar la memoria en cada llamada F1 (x). Pero por lo que puedo decir, eso no es lo que está sucediendo.
Además, no estoy seguro de si es relevante, pero mis datos consisten en matrices numpy.
Esta pregunta probablemente asuma que y se declaró primero dentro del ciclo, debería haber mencionado esto. ¡Sin embargo, no dude en comentar este aspecto de la pregunta! –
Si no te gusta el 'del y' explícito, extrae el cuerpo del bucle en una función. De esta forma, cualquier variable que se encuentre dentro del ciclo se limpiará automáticamente para cada iteración. – Duncan