龙空技术网

一文掌握Python中的引用计数

自由坦荡的湖泊AI 178

前言:

如今各位老铁们对“c语言计数变量如何使用”大致比较讲究,同学们都需要学习一些“c语言计数变量如何使用”的相关资讯。那么小编同时在网络上汇集了一些关于“c语言计数变量如何使用””的相关资讯,希望你们能喜欢,朋友们一起来学习一下吧!

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

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

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

输出:

22

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

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

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

输出:

7879

从输出可以看出,在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容器仍然有三个元素。

标签: #c语言计数变量如何使用