2016-01-02 39 views
2

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

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 

结果是:

i: 1 
wrapper_descriptor 1596 +3 
weakref 625 +1 
dict 870 +1 
method_descriptor 824 +1 
i: 2 
i: 3 
i: 4 

对于2,3和4时期,它示出了没有任何成长。但它应该显示numpy.array的数量增长

+0

我的猜测是你需要学习'objgraph'文档来了解它可以检测到什么,不能检测到。并扫描其他'objgraph' SO问题。 “numpy”应用程序并不多。 – hpaulj

回答

5

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

numpy的数组在C语言实现,并通过内部调用Py_INCREFPy_DECREF做自己reference counting。因此,它们不被Python garbage collector跟踪。诸如heapy和(大概)objgraph之类的工具使用Python垃圾收集器来跟踪对象的引用,因此numpy数组对它们是不可见的。

相关问题