nums = [1,2,3,4,5]
it = iter(nums)
print(next(it))
print(next(it))
for i in nums:
print(i)
here the result is:
1
2
1
2
3
4
5
所以我的问题是,当我们在对象上应用iter方法时,它是否会创建对象的副本并在其上运行下一个方法?
答案 0 :(得分:0)
=
运算符将值从右侧操作数分配到左侧操作数”,即c = a + b
将a + b
的值分配给c
{{ 3}}
您没有更改赋值行右侧的任何变量,值的副本已应用了一个函数,然后将该结果分配了新的变量名 {{1} } 。
答案 1 :(得分:0)
这是一种解决方法:
Write a sentence: I want to try.
try to want I.
({lst = ['Hi', 'I am a copy!']
itr = iter(lst)
print(next(itr))
lst[1] = 'I am _not_ a copy!'
print(next(itr))
不会创建iter(lst)
的副本)
答案 2 :(得分:0)
不,他们没有。一些Python类型,例如它的所有集合,仅支持多次迭代。多个迭代器对象可以保存对同一列表的引用,它们都只是在列表中保持自己的位置。
注意一些效果:
lst = [1,2,3,4,5]
it = iter(lst)
lst.pop() # modify the original list
list(it) # the iterator is affected
# [1,2,3,4]
更明显的是穷举迭代器并在其上调用iter
的情况:
it1 = iter(range(10))
it2 = iter(it1)
next(it)
# 0
next(it2)
# 1
next(it)
# 2
next(it2)
# 3
很明显,迭代器共享状态。
答案 3 :(得分:0)
iter(object)
返回一个 iterator对象,它是实现了__iter__
的对象的迭代器版本。 iter(object)
不会创建对象的副本。
>>> l=[[1,2],[4,5]]
>>> it=iter(l)
>>>next(it).append(3) #appending to the output of next() mutates the list l
>>> l
[[1,2,3],[4,5]]
>>> next(it).append(6)
>>> l
[[1,2,3],[4,5,6]]
>>> it=iter(l)
>>> l.pop() #Mutating the list l mutated iterator it.
[4,5,6]
>>>list(it)
[[1,2,3]]