On Aug 30, 3:50 am, "Martin v. Löwis" <[EMAIL PROTECTED]> wrote: > > gc.set_debug(gc.DEBUG_LEAK) > > print gc.garbage > > > --output:-- > > [] > > gc: uncollectable <Dog 0x56e10> > > gc: uncollectable <Cat 0x56e30> > > gc: uncollectable <dict 0x58270> > > gc: uncollectable <dict 0x43e40> > > gc.garbage is filled only after these messages > are printed, not before. You need to add an explicit > call to gc.collect() if you want to see what > uncollectable garbage you have. > > Regards, > Martin
Hi, Thanks for the response. I had a cut and paste error in my reply, so here it is again with the corrections... Now, if I run the code: ------------ import gc class Cat(object): def __del__(): pass class Dog(object): def __del__(): pass def some_func(): the_dog = Dog() the_cat = Cat() the_dog.cat = the_cat the_cat.dog = the_dog some_func() gc.set_debug(gc.DEBUG_LEAK) gc.collect() print gc.garbage ----------- I get this output: ---------- gc: uncollectable <Dog 0x56e10> gc: uncollectable <Cat 0x56e30> gc: uncollectable <dict 0x58300> gc: uncollectable <dict 0x43e40> [<__main__.Dog object at 0x56e10>, <__main__.Cat object at 0x56e30>, {'cat': <__main__.Cat object at 0x56e30>}, {'dog': <__main__.Dog object at 0x56e10>}] ----------- Why are there two entries in the list for each uncollectable object(same addresses)? Also, I haven't bound the names "cat" or "dog" anywhere in my program. What do those names mean in the list? Doing some further testing, if I eliminate the __del__ methods: ----------- import gc class Cat(object): pass class Dog(object): pass def some_func(): the_dog = Dog() the_cat = Cat() the_dog.cat = the_cat the_cat.dog = the_dog some_func() gc.set_debug(gc.DEBUG_LEAK) gc.collect() print gc.garbage ------------------- I get this output: ----- gc: collectable <Dog 0x56e10> gc: collectable <Cat 0x56e30> gc: collectable <dict 0x58270> gc: collectable <dict 0x43e40> [<__main__.Dog object at 0x56e10>, <__main__.Cat object at 0x56e30>, {'cat': <__main__.Cat object at 0x56e30>}, {'dog': <__main__.Dog object at 0x56e10>}] ----- The docs say: --------- garbage A list of objects which the collector found to be unreachable but could not be freed (uncollectable objects). -------- Since debugging doesn't show any uncollectable objects, why isn't gc.garbage empty? The docs also say: ---- garbage ...By default, this list contains only objects with __del__() methods. ---- Does set_debug() change the default?
-- http://mail.python.org/mailman/listinfo/python-list