On 3/12/2014 3:34 PM, Jurko Gospodnetić wrote:
I was wondering if someone could explain gc.get_objects() in a bit
more detail to me.
Does it return a list of 'all objects known to Python'? Only some of
them? Which does it return? Which it does not?
This took about 10 seconds.
>>> import gc
>>> help(gc.get_objects)
Help on built-in function get_objects in module gc:
get_objects(...)
get_objects() -> [...]
Return a list of objects tracked by the collector (excluding the
list returned).
---
Now, what object does gc track? CPython answer: objects that could be
involved in and kept alive by reverence cycles and therefore not deleted
when not needed by reference counting alone. Object instances, numbers,
and strings cannot be involved in reference cycles, as there are no user
settable references. Tuples can be:
a = []
b = (a,)
a[0] = b
A tuple of, for instance, ints would not need to be tracked, but if it
is, someone probably decided that the cost of checking is not worth the
benefit. Details are subject to change with versions. In 3.4, gc can
break cycles of objects with delete methods, whereas they previously
waiting until program shutdown. Some year ago, I remember a suggestion
to turn off gc while creating lots of tuples that did not need to be
tracked, but I do not know if that is still useful.
--
Terry Jan Reedy
--
https://mail.python.org/mailman/listinfo/python-list