博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python的垃圾回收机制以及引用计数
阅读量:6975 次
发布时间:2019-06-27

本文共 797 字,大约阅读时间需要 2 分钟。

Python中的计数引用

在Python中,由于Python一门动态的语言,内部采用的指针形式对数据进行标记的,并不像c/c++那样,通过指定的数据类型并分配相应的数据空间,Python中定义的变量名其实就是一个指针型的变量,如果我们在程序定义了重复的对象,那么Python底层不是开辟两个内存空间用来存放相同的数据对象,而是将不同的指针变量指向同一个数据对象。

例如:

那么“1”这个数据对象被变量a引用了一次,但是后来a又被赋值给了b,a和b的值都是1,但是他们共用数据对象,也就是它们通过指针共同指向“1”,这样系统就只要开辟一个内存空间来存放一个数值,从而节省了一定的内存空间。这种多个指针变量同事指向同一个数据对象,在Python中如果需要释放,那会怎么做呢,这就是Python中的垃圾回收机制。

Python中的垃圾回收机制

当Python中有不同的变量指向了同一个数据对象时,那么Python解释器会在这个数据对象上记上一个数,叫做引用次数,也即是该数据对象被其他的变量对象所用的次数,每多一个变量引用该数据对象,那么引用次数加1,当该引用次数为0时,那么Python解释器将会在内存中释放该数据对象。

当时是用del语句对变量进行删除时,那么并不是将整个变量都删除了,而是对该变量的计数引用进行减一的操作。

例如:

当我们定义了一个变量a,并且赋值为120,此时查看数据对象120被引用的次数,sys.getrefcount(120)语句用来查看数据对象120被引用的次数,我们可以看到为24,但是我们将变量a赋值给一个新的变量b后,再次查看数据对象120的被引用的次数,此时为26,因为sys.getrefcount()这个方法对数据对象120的引用也算是一次引用,所以是26次。

 

转载于:https://www.cnblogs.com/jums/p/9788614.html

你可能感兴趣的文章
什么是机器人底盘 答案在这里!
查看>>
SNMP 协议 OID的使用
查看>>
【CSS3教程】CSS3基础&常用技巧&实例集合
查看>>
面试题:2018最全Redis面试题整理
查看>>
引用头文件#include <queue>出错
查看>>
koa2 简单了解
查看>>
阿里P7架构师告诉你Java架构师必须知道的 6 大设计原则
查看>>
详解微信域名防封的方法以及检测等工具的技术原理
查看>>
smobiler介绍(二)
查看>>
Windows 8 快捷键大全
查看>>
安装hadoop下的sqoop1.99.3及配置问题全解决
查看>>
expect
查看>>
Could not create the view: An unexpected exception was thrown. Myeclipse空间报错
查看>>
RHEL6入门系列之九,常用命令2
查看>>
LINUX新手入门-1.装系统
查看>>
Attach Volume 操作(Part II) - 每天5分钟玩转 OpenStack(54)
查看>>
puppet 初识
查看>>
rsync
查看>>
ubuntu安装redis的方法以及PHP安装redis扩展、CI框架sess使用redis的方法
查看>>
功能演示:戴尔PowerConnect 8024交换机VLAN的创建与删除
查看>>