Python 3.x 为什么对class属性有三个引用? 让我们考虑这个代码: import sys import gc class A: a = "something here to print" def __init__(self): pass a = A() print(sys.getrefcount(A.a)) # prints 3 refs = gc.get_referents(A.a) print(len(refs)) # prints 0
我不明白为什么它会打印3。第三个参考点在哪里 为什么Python 3.x 为什么对class属性有三个引用? 让我们考虑这个代码: import sys import gc class A: a = "something here to print" def __init__(self): pass a = A() print(sys.getrefcount(A.a)) # prints 3 refs = gc.get_referents(A.a) print(len(refs)) # prints 0,python-3.x,class-attributes,Python 3.x,Class Attributes,我不明白为什么它会打印3。第三个参考点在哪里 为什么gc.get\u referents返回一个空列表?文档回答了问题的第一部分: sys.getrefcount(对象): 返回对象的引用计数。返回的计数通常比您预期的要高,因为它包含(临时)引用作为getrefcount()的参数 考虑一下问题的第二部分: 导入系统 导入gc A类: a=“要打印的内容” 定义初始化(自): 通过 a=a() 打印(sys.getrefcount(A.A))#打印3 refs=gc.get\u引用(A.A) 打
gc.get\u referents
返回一个空列表?文档回答了问题的第一部分:
sys.getrefcount(对象):
返回对象的引用计数。返回的计数通常比您预期的要高,因为它包含(临时)引用作为getrefcount()的参数
考虑一下问题的第二部分:
导入系统
导入gc
A类:
a=“要打印的内容”
定义初始化(自):
通过
a=a()
打印(sys.getrefcount(A.A))#打印3
refs=gc.get\u引用(A.A)
打印(透镜(参考文献))#打印0
refs2=gc.get_referers(A.A)#prints 2(您所期望的)
打印(透镜(参考文献2))
请参阅两种方法的文档:
gc.get_referents(*objs):返回任何参数直接引用的对象列表。[…]
gc.get_referers(*objs):返回直接引用任何objs的对象列表。[……]