Welcome to Python's object reference system. The variable names do not really have a deep relationship with the actual object stored in memory.
lst = [1, 2, 3]
itr = iter(lst) # iter object now points to the list pointed to by lst
print(next(itr)) # prints 1
# Both `lst` and `lst1` now refer to the same list
lst1 = lst
# `lst` now points to a new list, while `lst1` still points to the original list.
lst = ['a', 'b', 'c']
print(next(itr)) # prints 2
lst.append(4)
lst1.append(5) # here the list pointed to by `itr` is updated
for i in itr:
print(i) # prints 3, 5
TL;DR: Python variable names are just tags, that refer to some object in space.
When you call iter on the list named lst, the iterator object points to the actual object, and not the name lst.
If you can modify the original object, by calling append, extend, pop, remove, etc, the iterator's output will be affected. But when you assign a new value to lst, a new object is created (if it didn't previously exist), and lst simply starts pointing to that new object.
The garbage collector will delete the original object if no other object is pointing to it (itr is pointing to it in this case, so the original object won't be deleted yet).
http://foobarnbaz.com/2012/07/08/understanding-python-variables/
Extra:
lst1.extend([6, 7, 8])
next(itr) # raises StopIteration
This doesn't have anything to do with object referencing, the iterator just stores internally that it has iterated the complete list.