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」へのすべての参照がなくなったときに自動的に「s」を取得できるようにするにはどうすればよいですか?