Depende de lo quieras hacer.
Por ejemplo:
Como vemos en el código de arriba se ocupa mucha memoria, por que creamos una lista con 10000 elementos y luego lo iteramos sobre esa lista. (Ok 10000 elementos todavia no son tantos elementos).
Ahora un ejemplo usando un generador.
El generador como su nombre lo indica va generando elementos conforme lo necesite. De esta forma no necesitas tener una lista con todos los elementos.
En python 3.x cambiaron esto y range ahora es como xrange.
Claro que no necesitas (como en otros lenguajes) declarar el tamaño, ni el tipo. Solo creas tu lista y le vas añadiendo datos.