
amauryfa at gmail
Aug 25, 2008, 4:22 AM
Post #2 of 4
(671 views)
Permalink
|
Hello, 2008/8/25 Robert Schuppenies <robert.schuppenies[at]gmail.com>: > Hi. > > Could you please explain to me why some iterators have a tp_traverse > implementation and others do not? For example tupleiterator has one, > but none of the dict iterators. Same for set iterators (and possibly > others). It shows in Python when you use the get_referents function. > >>>> t = (1,2,3) >>>> gc.get_referents(iter(t)) > [(1, 2, 3)] >>>> s = set([1,2,3]) >>>> gc.get_referents(iter(s)) > [] >>>> d = {1:1, 2:2} >>>> gc.get_referents(iter(d)) > [] > > And is it correct that you can rephrase the question to 'why some > iterators are seen as container objects and others are not'? Yes, this can lead to some object cycle that are not collected. See the attached script: a cycle involving a list iterator is collected by the garbage collector, but a cycle with a dict iterator is not. This is worth a bug report IMO. -- Amaury Forgeot d'Arc
|