Я пытался разрешить numpy
показать, что все массивы существуют в памяти (np.who()
по умолчанию показывает только массивы, которые определены глобально). Я провел некоторый эксперимент с gc.get_objects()
, но обнаружил, что он не возвращает все объекты, которые я ожидал. Вот что я сделал:
In [1]: a = [[object()]]
In [2]: import gc
In [3]: for i in gc.get_objects():
...: if i is a:
...: print('found a')
...: elif i is a[0]:
...: print('found a[0]')
...: elif i is a[0][0]:
...: print('found the object')
...:
found a
found a[0]
In [4]: import numpy as np
In [5]: a = [[np.empty(4)]]
In [6]: for i in gc.get_objects():
...: if i is a:
...: print('found a')
...: elif i is a[0]:
...: print('found a[0]')
...: elif isinstance(i, np.ndarray):
...: print(f'found array with shape {i.shape} and dtype {i.dtype}')
...:
...:
found array with shape () and dtype float64
found array with shape () and dtype float64
found a
found a[0]
Для первого случая object()
никогда не найден. Во втором случае массив с формой (4,)
(вместо ()
) не найден. Мне интересно, что мое понимание gc.get_objects()
неверно? Он говорит:
Возвращает список объектов, отслеживаемых сборщиком (исключая возвращенный список)
Означает ли это, что эти пустые массивы не будут автоматически удалены gc?