`gc.get_objects ()` не получает весь объект? - PullRequest
0 голосов
/ 06 ноября 2019

Я пытался разрешить 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?

...