Lista x generator: memória e avaliação
Pergunta
Qual a diferença entre `[x*2 for x in range(1_000_000)]` e `(x*2 for x in range(1_000_000))` em Python?
Resposta esperada
O primeiro (list comprehension) materializa a lista inteira na memória de uma vez — 1 milhão de inteiros alocados. O segundo (generator expression) devolve um objeto generator que produz cada valor sob demanda, um por vez, guardando só o estado atual — memória praticamente constante. Use generator quando você vai iterar uma vez e o volume é grande (streaming, pipeline), ou quando pode parar no meio. Use lista quando precisa indexar, percorrer várias vezes, saber o tamanho, ou passar pra algo que espera uma sequência. O generator é 'lazy': se você nunca consumir, o trabalho nunca acontece.
Por que perguntam isso
Pergunta júnior/pleno. Sinal bom: mencionar que generator só serve pra uma passada e não tem `len()`. Sinal ótimo: citar caso de uso de pipeline/streaming.