Paul Paul - 3 months ago 29
Python Question

How does python iterator for list actually works?

Let's say we have the following list and we are creating an iterator for it:

lst = [1,2,3]
itr = iter(lst)

Next lets say we are changing our list with completely different values:

lst = ['a', 'b', 'c']

And if I we run the following loop:

for x in itr:
print x

We will get
. But why? As far as I understand, iterator doesn't copy all values from iterating object. At least iterator for list from three elements has the same size as a list of 100000 elements.
. How can iterator be so small by size and keep 'old' values of list?


The iterator itself contains a reference to the list. Since lst is rebound instead of mutated, this reference does not change.

>>> lst = [1, 2, 3]
>>> itr = iter(lst)
>>> lst[:] = ['a', 'b', 'c']
>>> for x in itr:
...   print x