首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中复制迭代器

在Python中复制迭代器
EN

Stack Overflow用户
提问于 2019-11-13 13:25:43
回答 1查看 334关注 0票数 5

当你制作一个迭代器的(浅)副本时,它会返回一个新的迭代器。

代码语言:javascript
复制
from copy import copy


data = [1, 2, 3, 4]

iter1 = iter(data)
iter2 = copy(iter1)

[i for i in iter1]    #[1, 2, 3, 4]
[i for i in iter2]    #[1, 2, 3, 4]

当您对使用itertools创建的迭代器进行浅层复制时,它将返回相同的迭代器,但深度复制将返回一个新的迭代器。

代码语言:javascript
复制
from copy import copy, deepcopy
from itertools import takewhile


data = [1, 2, 3, 4]

iter1 = takewhile(lambda x: x < 5, data)
iter2 = copy(iter1)
iter3 = deepcopy(iter1)

[i for i in iter1]    #[1, 2, 3, 4]
[i for i in iter2]    #[] because it's the same iterator
[i for i in iter3]    #[1, 2, 3, 4]

这是预期的行为吗?在文档中我找不到任何关于复制迭代器的信息。我知道有一个itertools.tee()函数,但它的可用性是有限的(例如,当我们遍历一个不断变化的集合时)。

EN

回答 1

Stack Overflow用户

发布于 2019-11-13 14:14:14

这是已知的行为。

他们指出,“在用户编码的迭代器类型中单独迭代copy.copy的‘支持’几乎总是‘偶然’的……只有在实现中存在某些条件时,副本才能相对于原始版本独立迭代。”

他们决定不采用那个PEP。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58830799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档