【发布时间】:2020-03-17 22:22:20
【问题描述】:
以下代码在Python3的Mac终端上运行:
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.value0的引用计数,如果对d.value的引用计数确实是0,为什么d.value没有被Python收集垃圾? 引用对象
d的确切列表是什么?
谢谢!
【问题讨论】:
-
你为什么要继承
object?这是 Python 2 吗?如果是这样,请标记它。 -
这是python3。我这样做是出于习惯。感谢您的编辑