Como evitar que o iterador fique esgotado no Python (3.x)?

Se eu criar duas listas e zip-las

a=[1,2,3]
b=[7,8,9]
z=zip(a,b)

Então eu typecast z em duas listas

l1=list(z)
l2=list(z)

Então o conteúdo de l1 fica bem [(1,7), (2,8), (3,9)], mas o conteúdo de l2 é apenas [].

Eu acho que este é o comportamento geral do python no que diz respeito aos iteráveis. Mas como um novato programador migrando da família C, isso não faz sentido para mim. Por que se comporta de tal maneira? E existe uma maneira de superar esse problema?

Quero dizer, sim, neste exemplo em particular, posso copiar l1 para l2, mas em geral há uma maneira de "redefinir" o que o Python usa para iterar "z" depois de iterar uma vez?

questionAnswers(5)

yourAnswerToTheQuestion