python的计数引用分析(一),python计数引用分析,python的垃圾回
python的计数引用分析(一),python计数引用分析,python的垃圾回
python的垃圾回收采用的是引用计数机制为主和分代回收机制为辅的结合机制,当对象的引用计数变为0时,
对象将被销毁,除了解释器默认创建的对象外。(默认对象的引用计数永远不会变成0)
所有的计数引用+1的情况:
一.对象被创建:
1.a = 23
这里23这个对象并没有在内存中新建,因为在Python启动解释器的时候会创建一个小整数池,-5~256之间的这些对象
会被自动创建加载到内存中等待调用;a = 23是为23这个整数对象增加了一个引用。
执行代码:
>>> import sys>>> a = 23>>> sys.getrefcount(a)
结果:15
23这个整数对象目前有15个引用。
2.MyName()
class MyName(object):
pass
以上,如果对象被创建后没有引用操作,此时的引用计数是0,MyName()本身不是一个引用。
print(sys.getrefcount(MyName()))
结果:1
说明:之所以结果为1,是因为sys.getrefcount(MyName())函数也算一个引用。
二.对象被引用;
a = 23345455b = ac = bprint(sys.getrefcount(b))print(sys.getrefcount(c))
结果:4,4
说明:每一次赋值都会增加数据操作的引用次数,要记住引用的是变量a,b,c等指向的数据23345455,而不是变量本身。
三.对象被作为参数,传入到一个函数中;
# 增加了一个引用a = 23345455# 增加了一个引用b = a# 增加了一个引用c = b# 增加了一个引用print(sys.getrefcount(b)) # 执行完毕后引用销毁,减少一个引用# 增加了一个引用print(sys.getrefcount(c))
说明:以上代码,赋值操作为数据增加了3个引用,sys.getrefcount(b)也增加了一个引用;
那为什么sys.getrefcount(c)的结果还是4呢?这是因为当函数执行后,作为参数的引用会自动销毁,所以print(sys.getrefcount(b))在执行完毕后引用就删除了。
四.对象作为一个元素,存储在容器中;
# 增加了一个引用a = 23345455# 增加了一个引用b = alist = [a, b] # 增加了2个引用print(sys.getrefcount(b)
结果:5
另外还有所有的引用计数减1的情况:python的计数引用分析(二)
python的计数引用分析(一)
相关内容
- Python中PIL及Opencv转化,pythonpilopencv,转载:http://
- Python3基础 filter()第一个参数为NONE时 结果只返回为Tru
- 第三百五十四节,Python分布式爬虫打造搜索引擎Scrapy精
- python3写的一个检测远程服务器端口脚本,python3服务器
- python爬虫笔记之re.IGNORECASE,, re.IGNO
- pip 升级 Appium-Python-Client,,第一种方法:pip
- 从0开始在腾讯云服务器上搭建python3+flask+uwsgi+nginx服务
- 考虑以下 Python 代码,如果运行结束,命令行中的运行
- python入门-WHILE循环,python入门-while,1 使用while循
- python+selenium 定位隐藏元素,pythonselenium,定位隐藏要素的
评论关闭