我有一个关于Numpy数组内存管理的问题。假设我使用以下方式从缓冲区创建一个numpy数组:
在上述情况下,'arr'是否持有对's'的引用?如果我删除's',那么这将释放为's'分配的内存,从而使'arr'可能引用未分配的内存吗?
我还有一些其他问题:
- 如果这是有效的,Python如何知道何时释放由's'分配的内存?gc.get_referrents(arr)函数似乎并没有显示'arr'持有对's'的引用。 - 如果这是无效的,我如何将对's'的引用注册到'arr'中,以便Python GC在所有对它的引用都消失时自动清除's'?
>>> 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'?
s
在两种情况下的引用计数增加。虽然这并不重要,但它当然有效。 - seberg