Python-对象的引用计数

对象的引用计数

通常情况下,开发人员无需关心内存的分配和释放。当创建一个对象时,系统会自动分配一块内存以存储该对象的信息。当该对象不再被使用时,系统会进行垃圾回收以自动释放其占用的内存。为了确保使用中的对象不会被销毁,python使用引用计数来跟踪和计算内存中每个对象被引用的次数。当对象的引用计数为0时,它才会被销毁。

对象的引用计数加1的情形:
1、对象赋值给变量
2、引用对象的变量赋值给另一个变量
3、对象作为容器(例如:列表、字典、集合等)中的元素。
4、对象作为函数调用时的实参,当函数执行后,对实参的引用会自动销毁

可以使用标准库sys中的getrefcount()方法获取当前的引用数

>>> class MyClass(object):
...     pass
...
>>> import sys

>>> mc = MyClass()

>>> sys.getrefcount(mc)    # 执行此方法的时候,mc被当做实参传递,因此引用次数也会加1,加上之前MyClass赋值给变量的加1,所以结果是2
2
>>>
>>> mc1 = mc
>>> sys.getrefcount(mc)    # 执行此方法的时候,mc被当做实参传递,因此引用次数也会加1,加上之前MyClass赋值给变量的加2,所以结果是3
3
>>> L = [1, 2, mc]
>>> sys.getrefcount(mc)    # 执行此方法的时候,mc被当做实参传递,因此引用次数也会加1,加上之前MyClass赋值给变量的加3,所以结果是4
4

对象引用计数减1的情形:
1、对象离开它的作用域,例如:对象所在的函数执行完毕
2、对象的引用被显式销毁(del语句)
3、引用对象的变量被赋予新的变量
4、从容器中删除对象,或对象所在的容器被销毁


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 289211569@qq.com