On Aug 30, 12:36 pm, "Chris Mellon" <[EMAIL PROTECTED]> wrote: > On 8/30/07, 7stud <[EMAIL PROTECTED]> wrote: > > > 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? > > Read your output carefully! > > gc.garbage is a list of objects. The objects are printed just as they > would be anywhere else in Python. You've got the dog object, the cat > object, and the __dict__ of each instance. > >
Ah. I missed the braces inside the list, but I still don't understand where the names "cat" and "dog" come from. > DEBUG_SAVEALL is set, then all unreachable objects will be added to > this list rather than freed." What is the definition of an "unreachable object"? If I add the following: ----- y = Cat() del y ----- That object doesn't make it into gc.garbage.
-- http://mail.python.org/mailman/listinfo/python-list