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