Repaso
English
PythonIntermedioPY-06

sum(x * x for x in range(10**8)) frente a sum([x * x for x in range(10**8)]). ¿Cuál es la diferencia clave?

Opciones

  1. La versión con generator siempre es más rápida porque se salta el bucle
  2. La versión con generator mantiene un elemento a la vez, así que la memoria no crece (Opción correcta)
  3. Ambas versiones son idénticas después de que Python las compila a bytecode
  4. La versión con lista es lazy y solo crea valores cuando sum los pide

Respuesta

La versión con generator usa una memoria casi constante; la versión con lista construye primero 100 millones de elementos

Por qué

Con corchetes [...] Python primero construye en memoria una lista completa de 100 millones de números, y solo entonces sum los suma.

Con paréntesis (...) es una generator expression: cada número se crea solo cuando sum pide el siguiente, así que solo existe un número a la vez.

Mismo resultado, mucha menos memoria.

Recuerda

Usa generators para datos grandes que solo recorres una vez.

Términos clave

Practica esta pregunta en Repaso