Он не удаляется.
Если вы выполните print(z1)
, вы увидите, что он печатает почтовый объект .Это потому, что zip
не создает tuple
или list
, а скорее итератор .
Итератор - это то, что генерирует значения по требованию.В этом случае объект zip генерирует пары, взятые из входных данных;а именно списки mutants
и powers
.Чтобы увидеть это в действии, после назначения z1
вы можете позвонить print(next(z1))
, что заставит z1
сгенерировать следующую пару и распечатать ее;в этом случае ('charles xavier', 'telepathy')
.
Если вы продолжаете вызывать next(z1)
, он будет перебирать два списка, пока не достигнет конца.В этот момент у него не осталось данных для чтения, поэтому, если вы попытаетесь вызвать next(z1)
снова, это вызовет исключение StopIteration
, которое означает, что итерируемое значение исчерпано .
И наоборот, если бы вы сделали что-то вроде t1 = tuple(z1)
, вы сможете звонить print(*t1)
столько раз, сколько захотите.Однако, если вы это сделаете, а затем попытаетесь позвонить t2 = tuple(z1)
, вы поймете, что t2
пусто.Это по той же причине, что и приведенная выше: сборка t1
из z1
уже исчерпала ее, поэтому, когда t2
пытается получить значения из z1
, он сразу же набирает StopIteration
и, таким образом, генерирует пустое tuple
.