【发布时间】:2013-01-29 16:18:10
【问题描述】:
我有一个关于 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'?
【问题讨论】: