我有一个关于 Numpy 数组内存管理的问题。假设我使用以下内容从缓冲区创建一个 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',这是否会释放为's'分配的内存,从而使'arr'可能引用未分配的内存?
我还有一些其他问题:
- 如果这是有效的,Python 怎么知道何时释放 's' 分配的内存?gc.get_referrents(arr) 函数似乎没有显示“arr”包含对“s”的引用。
- 如果这是无效的,我怎样才能将 's' 的引用注册到 'arr' 中,以便 Python GC 在对它的所有引用都消失时自动获取 's'?