Como um loop for avalia seu argumento

Minha pergunta é muito simples.

Faz umfor loop avalia o argumento que usa sempre?

Tal como:

for i in range(300):

O python cria uma lista de 300 itens para cada iteração desse loop?

Se for, é uma maneira de evitá-lo?

lst = range(300)
for i in lst:
    #loop body

O mesmo vale para exemplos de código como este.

for i in reversed(lst):

for k in range(len(lst)):

O processo inverso é aplicado todas as vezes ou o comprimento calculado a cada iteração? (Peço isso para python2 e python3)

Caso contrário, como o Python avalia as alterações no iterável enquanto itera sobre ele?

questionAnswers(3)

yourAnswerToTheQuestion