4
我有一个关于Numpy阵列内存管理的问题。假设我创建使用以下的缓冲一个numpy的数组:为“S”Numpy阵列内存管理
>>> s = "abcd"
>>> arr = numpy.frombuffer(buffer(s), dtype = numpy.uint8)
>>> arr.flags
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : False
WRITEABLE : False
ALIGNED : True
UPDATEIFCOPY : False
>>> del s # What happens to arr?
在上面的情况下,是“ARR”持有参考?如果我删除's',这会释放为's'分配的内存,从而使'arr'潜在地引用未分配的内存?
我有一些其他问题:
- 如果这是有效的,Python是怎样知道什么时候,以释放的'分配的内存? gc.get_referrents(arr)函数似乎没有显示'arr'持有对's'的引用。
- 如果这是无效的,我如何注册's'到'arr'的引用,以便Python GC在它的所有引用都不存在时自动收获'?'
在这两种情况下,您都可以使用CPython中的sys.getrefcount来监视's'的refcount增量。不重要的是,它当然是有效的。 – seberg 2013-02-14 10:39:54