Следующий код выполняется на терминале Ma c на Python3:
import gc
import numpy as np
class D(object):
def __init__(self):
self.value = np.arange(3)
def get(self):
return self.value
d = D()
print(gc.get_referrers(d))
print(type(gc.get_referrers(d)))
print()
print(len(gc.get_referrers(d)))
print(len(gc.get_referrers(d.value)))
print()
l = []
l.append(d)
print(len(gc.get_referrers(d)))
print(len(gc.get_referrers(d.value)))
print()
x = d.value
print(len(gc.get_referrers(d)))
print(len(gc.get_referrers(d.value)))
Код выше вернется:
[{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x10de6cef0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'test3.py', '__cached__': None, 'gc': <module 'gc' (built-in)>, 'np': <module 'numpy' from '/Users/jkim/Codes/Codes/Notebooks/venv3/lib/python3.6/site-packages/numpy/__init__.py'>, 'D': <class '__main__.D'>, 'd': <__main__.D object at 0x10dec7fd0>}]
<class 'list'>
1
0
2
0
2
1
Может кто-нибудь объяснить мне:
Почему счетчик ссылок на d.value
0
, а если счетчик ссылок на d.value
действительно 0
, почему d.value
не получает мусор, собранный Python?
Что именно представляет собой список, на который ссылается объект d
?
Спасибо!