iter

Peter Otten __peter__ at web.de
Mon Aug 9 18:31:07 CEST 2010


daryn wrote:

> I'm just playing around with the iter function and I realize that I
> can use the iterator returned by it long after the original object has
> any name bound to it.  Example:
> 
>>>>a=[1,2,3,4]
>>>>b=iter(a)
>>>>b.next()
> 1
>>>>a[1]=99
>>>>a[3]=101
>>>>del a
>>>>b.next()
> 99
>>>>b.next()
> 3
>>>>b.next()
> 101
> 
> it seems as if the original object is never being garbage collected
> even though there is no name bound to it.  Does the name bound to the
> iterator object count as a reference to the original object for
> garbage collection purposes?  

The listiterator object internally holds a reference to the list, but 
doesn't make it available to Python code.

> Is there some way to retrieve/manipulate
> the original object via the iterator?

Not without dirty tricks (ctypes).
 
> Just trying to understand how this all works.

If you can read C look here:

http://svn.python.org/view/python/branches/py3k/Objects/listobject.c?revision=81032&view=markup

Peter



More information about the Python-list mailing list