python中的zip函数问题

想知道,zip函数打包了两个数组,为什么直接用print(list(zipdata))可以打印里面的内容,但是赋值给新的变量zipdata2后就不行呢,就打印不出来了,不是很看得懂我测试的这个结果,能不能帮忙解释一下
测试:


#python
list1 = [1, 2, 3]
list2 = ["one", "two", "three"]
zipdata = zip(list2, list1)
print(zipdata)
print(type(zipdata))
print(list(zipdata))
print("*"*20)

zipdata2 = list(zipdata)
print(zipdata2)
print(type(zipdata2))


#结果
<zip object at 0x000001EE145306C0>
<class 'zip'>
[('one', 1), ('two', 2), ('three', 3)]
********************
[]
<class 'list'>

python中zip()函数返回的<class 'zip'>是一个迭代器(有__next__和__iter__方法),当你通过第8行代码执行后,这个迭代器就迭代完了,相当于for循环遍历完了,所以第11行执行后就没有数据了,返回的就是空列表。把第8行注释掉zipdata2就不会是空列表了

有帮助的话,请点采纳该答案~