Todas las excepciones de Python heredan de la clase BaseException o se extienden desde una clase heredada en la misma. La jerarquía de excepciones completa de este error es:
*BaseException
*Excepción.
*MemoryError
En la mayoría de las situaciones, un MemoryError
en Python indica una falla importante en la aplicación actual.
Por ejemplo, una aplicación que acepta archivos o entrada de datos de usuario podría ejecutar MemoryErrors si la aplicación no tiene suficientes controles que validen y saneen las entradas.
Hay toneladas de escenarios en los que los límites de memoria pueden ser problemáticos, pero para nuestra ilustración de código nos quedaremos con una asignación simple en la memoria local usando cadenas y arreglos.
El factor más importante para determinar si es probable una aplicacion experimente MemoryErrors es en realidad la arquitectura de la computadora en la que se ejecuta el sistema.
O, incluso más específicamente, la arquitectura que usa su versión de Python.
Versión Python y MemoryError
Si está utilizando Python de 32 bits, la asignación de memoria máxima otorgada al proceso de Python, es excepcionalmente baja.
El límite máximo específico de asignación de memoria varía y depende de su sistema, pero por lo general es de alrededor de 2 GB y no más de 4 GB.
Por otro lado, las versiones de Python de 64 bits, están más o menos limitadas solo por la memoria disponible del sistema.
En términos prácticos, es poco probable que un intérprete de Python de 64 bits experimente problemas de memoria, o si lo hace, es porque hay un problema mucho mayor que está afectando a todo el resto del sistema.
Puedes ver más información sobre este error, en Stackoverflow
En definitiva debido a que existe una gran diferencia entre las versiones de Python de 32 y 64 bits, la solución a tu problema de memoria podría ser cambiar a Python de 64 bits y ejecutar el mismo código.
Si después de unas pocas iteraciones no se ha lanzado MemoryError se debe a la versión de Python que estas utilizando.
Puedes cortar las rosas una a una, ……. pero la primavera seguirá en el jardín
J.A. Buesa