为何底层数据一致时两个zip对象却不相等?
为什么内容相同的zip对象直接比较返回False?
zip()函数返回的是迭代器对象,Python中迭代器的相等性判断逻辑是比较对象的身份(内存地址),而非它们生成的内容:
- 每次调用
zip()都会创建一个全新的迭代器实例,哪怕数据源内容完全一致,这两个实例在内存中的地址也是不同的,直接用==比较时自然返回False。你可以通过id()函数验证这一点:>>> id(w1) 140703324501696 >>> id(w2) 140703324501824
而将迭代器转为list时,list()会完整遍历迭代器的所有元素并收集为列表,此时==比较的是列表的内容,只要元素的顺序和值完全匹配,就会返回True。
另外需要注意:迭代器是一次性的,一旦被遍历(比如转成列表),再次遍历就不会返回任何元素了:
>>> list(w1) # 第一次遍历获取全部元素 [(1, 4), (2, 5), (3, 6)] >>> list(w1) # 第二次遍历无元素返回 []
内容的提问来源于stack exchange,提问作者newview
相关产品推荐
相关产品推荐

