Python中函数和类的生命周期是怎样的 ?

Python 中函数算是 function 的实例, 而类算是 type 的实例, 那么函数和类的生命周期是怎样的呢 ?

In [1]: def func():
   ...:     pass
   ...:

In [2]: type(func)
Out[2]: function

In [3]: class Test(object):
   ...:     pass
   ...:

In [4]: type(Test)
Out[4]: type

是被创建后就一直存活到程序运行结束还是按引用计数来算的 ?

如果是按引用计数来计算, 那么函数和类的引用计数是怎样计算的呢 ?

阅读 5.2k
2 个回答

当然还是引用计数了啊,计数不归零就不会被回收了。函数算是 function 的实例, 类算是 type 的实例。把 def func() 理解成 func = new Function() ,此时该函数实例计数是 1 ,如果此时删除其引用 del func 或者给 func 赋值其他值,致使函数对象引用计数为0,那它就被回收了,同理的 class Test(object) 视为 Test = new type() ,它的引用计数同一般普通的变量计算方式一样,没什么特别的。所以只要引用计数不为 0,那它的生命周期就是整个程序的生命周期。

这点上,模块中为了不暴露给用户私密的函数或类,都会在文末进行 del 操作,例如标准库中 datetime.py 中的文末:

图片描述

那要看你在哪里定义咯

如果你定义的全局的,那就是整个程序的生命周期;而如果在 if for 等子块中定义那就在该子块局部作用域有效,除非被其他作用域引用

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题