一文掌握Python中的引用计数

一文掌握Python中的引用计数

首页休闲益智数量计数更新时间:2024-06-08

Python中的引用计数是一种自动管理内存的方法,它可以避免程序运行过程中出现内存泄漏或溢出的问题。Python的引用计数原理非常简单,每一个对象都包含了两个头部信息,一个是类型标志符,标识这个对象的类型;另一个是计数器,记录当前指向该对象的引用数目,表示这个对象被多少个变量名所引用。CPython使用引用计数来管理内存,所有Pythonn脚本中创建的实例,都会有一个引用计数,来记录有多少个指针指向它。当引用计数只有0时,则会自动释放内存。

在Python中通过sys.getrefcount()查看引用计数的方法,注意调用getrefcount()函数会临时增加一次引用计数,得到的结果比预期的多一次。例如:

import sys a = [] b = a print(sys.getrefcount(a)) print(sys.getrefcount(b))

输出:

2 2

从输出可以看出,a和b都有两次引用(一次来自a,一次来自sys.getrefcount()),所以总共有四次引用。

当一个变量离开了作用域时,例如函数执行完成时或者del语句删除时,它对应的对象的引用计数会减少。如果在函数内打印,则能看到引用计数增加或减少。例如:

def func(str): print(sys.getrefcount(str)) func('A') func('B')

输出:

78 79

从输出可以看出,在func(‘A’)之后,在func(‘B’)之前,str对象的引用计数分别增加了1和1。

当一个变量被从容器对象中移除时(例如del语句删除),它对应的容器对象也会失去对该变量的引用,并且自身也会减少一个元素。例如:

c = [1, a, 'abc'] del c[0] print(sys.getrefcount(a))

输出:

2

从输出可以看出,在删除c[0]之后,在打印a之前,a对象仍然被c容器所引用,并且c容器仍然有三个元素。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved