看代码:
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的数量增长
我并不熟悉objgraph
,但我认为同样的问题适用于其他Python堆分析工具,如heapy
.
Numpy数组在C中实现,并通过内部调用和自己的引用计数.因此,它们不会被Python 垃圾收集器跟踪.类似的工具(可能)使用Python垃圾收集器来跟踪对象的引用,因此numpy数组对它们是不可见的.Py_INCREF
Py_DECREF
heapy
objgraph