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 -- http://mail.python.org/mailman/listinfo/python-list