为什么objgraph不能捕获np.array()的增长?

Jas*_*son 3 python memory-leaks numpy memory-leak-detector objgraph

看代码:

import objgraph
import numpy as np
objgraph.show_growth()
j = 20
y = []
for i in range(5):
    for l in range(j):
        y.append(np.array([np.random.randint(500),np.random.randint(500)]))
    print 'i:',i
    objgraph.show_growth()
    print '___'
    #objgraph.show_most_common_types(limit=100)
    j += 1
Run Code Online (Sandbox Code Playgroud)

结果是:

i: 1
wrapper_descriptor 1596 +3
weakref 625 +1
dict 870 +1
method_descriptor 824 +1
i: 2
i: 3
i: 4
Run Code Online (Sandbox Code Playgroud)

对于2,3和4时代,它没有显示任何增长.但它应该表明numpy.array的数量增长

ali*_*i_m 7

我并不熟悉objgraph,但我认为同样的问题适用于其他Python堆分析工具,如heapy.

Numpy数组在C中实现,并通过内部调用和自己的引用计数.因此,它们不会被Python 垃圾收集器跟踪.类似的工具(可能)使用Python垃圾收集器来跟踪对象的引用,因此numpy数组对它们是不可见的.Py_INCREFPy_DECREFheapyobjgraph