On Mon, Sep 15, 2014 at 11:55 AM, Sebastian Berg <sebast...@sipsolutions.net > wrote:
> On Mo, 2014-09-15 at 10:16 +0200, Mads Ipsen wrote: > > Hi, > > > > I am trying to inspect the reference count of numpy arrays generated by > > my application. > > > > Initially, I thought I could inspect the tracked objects using > > gc.get_objects(), but, with respect to numpy objects, the returned > > container is empty. For example: > > > > import numpy > > import gc > > > > data = numpy.ones(1024).reshape((32,32)) > > > > objs = [o for o in gc.get_objects() if isinstance(o, numpy.ndarray)] > > > > print objs # Prints empty list > > print gc.is_tracked(data) # Print False > > > > Why is this? Also, is there some other technique I can use to inspect > > all numpy generated objects? > > > > Two reasons. First of all, unless your array is an object arrays (or a > structured one with objects in it), there are no objects to track. The > array is a single python object without any referenced objects (except > possibly its `arr.base`). > > Second of all -- and this is an issue -- numpy doesn't actually > implement the traverse slot, so it won't even work for object arrays > (numpy object arrays do not support circular garbage collection at this > time, please feel free to implement it ;)). > > - Sebastian > > Does this answer why the ndarray object itself isn't tracked though? I must say I find this puzzling; the only thing I can think of is that the python compiler notices that data isn't used anymore after its creation, and deletes it right after its creation as an optimization, but that conflicts with my own experience of the GC.
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion