“函数参数”中的引用计数与“ Python函数堆栈”中的引用计数有何不同-Python

时间:2019-08-17 18:49:17

标签: python reference-counting

我试图了解Python中的引用计数。这是我从帖子(https://rushter.com/blog/python-garbage-collector/)中获得的示例:

foo = []

# 2 references, 1 from the foo var and 1 from getrefcount
print(sys.getrefcount(foo))

def bar(a):
    # 4 references
    # from the foo var, function argument, getrefcount and Python's function stack
    print(sys.getrefcount(a))

bar(foo)
# 2 references, the function scope is destroyed
print(sys.getrefcount(foo))

我不清楚第二个sys.getrefCount为何为4。作者说这四个引用来自foo var,函数参数,getrefcount和Python的函数堆栈。调用bar(foo)的引用是否与Python's function stack相同?有人可以详细解释吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

  • foo是指向该空列表的一个引用指针
  • bar(foo)->这里foo是引用同一空列表的另一个变量
  • def bar(a)->这里a是另一个变量,它引用相同的空列表
  • 内部栏函数sys.getrefcount(a)->创建一个对同一空列表的临时引用
  • 因此总共是4