python 引用计数问题
python的垃圾回收采用的是 引用计数机制为主和 分代回收机制为辅的 结合机制,当对象的引用计数变为0时,对象将被销毁,除了解释器默认创建的对象外。(默认对象的引用计数永远不会变成0)
对象的引用计数+1的情况:
1. 对象被创建
>>> import sys >>> a = 23 >>> sys.getrefcount(a) 6 1234
这里23这个对象并没有在内存中新建,因为在Python启动解释器的时候会创建一个小整数池,-5~256之间的这些对象会被自动创建加载到内存中等待调用;a = 23是为23这个整数对象增加了一个引用。
>>> class MyName(): ... pass ... >>> sys.getrefcount(MyName()) 1 12345
结果为1,是因为sys.getrefcount(MyName())函数也算一个引用。
2. 对象被引用
>>> a = 3.1415926 >>> b = a >>> c = b >>> sys.getrefcount(a) 4 >>> sys.getrefcount(b) 4 >>> sys.getrefcount(c) 4 123456789
每一次赋值都会增加数据操作的引用次数,要记住引用的是变量a,b,c等指向的数据 3.1415926 ,而不是变量本身。
3. 对象被作为参数,传入到一个函数中
>>> a = 3.1415926 # 增加一个引用 count = 1 >>> b = a # 增加一个引用 count = 2 >>> c = b # 增加一个引用 count = 3 >>> sys.getrefcount(b) # 增加一个引用 count = 4 执行完毕后引用销毁,减少一个引用 count = 3 4 >>> sys.getrefcount(c) # 增加一个引用 count = 4 执行完毕后引用销毁,减少一个引用 count = 3 4 1234567
函数 sys.getrefcount() 调用时 会增加一个引用,调用完又销毁一个引用。 实际上就是实参传给形参的问题。
4. 对象作为一个元素,存储在容器中
>>> a = 3.1415926 # 增加一个引用 count = 1 >>> sys.getrefcount(a) 2 >>> b = a # 增加一个引用 count = 2 >>> sys.getrefcount(a) 3 >>> list_ = [a, b] # 增加两个引用 count = 4 >>> sys.getrefcount(a) 5 123456789
对象的引用计数-1的情况:
1. 对象的别名被赋予新的对象
>>> a = 3.1415926 # 增加一个引用 count = 1 >>> b = a # 增加一个引用 count = 2 >>> sys.getrefcount(a) 3 >>> b = -3.1415926 # 原对象减少一个引用 count = 1 >>> sys.getrefcount(a) 2 1234567
2. 对象的别名被显式销毁
>>> a = 3.1415926 # 增加一个引用 count = 1 >>> b = a # 增加一个引用 count = 2 >>> sys.getrefcount(a) 3 >>> del b # 减少一个引用 count = 1 >>> sys.getrefcount(a) 2 1234567
3. 一个对象离开它的作用域
>>> a = 3.1415926 # 增加一个引用 count = 1 >>> sys.getrefcount(a) # 增加一个引用 count = 1 ==> 打印 2 ==> 减少一个引用 count = 1 2 123
a 作为参数传递到 sys.getrefcount(a) 函数中,只在函数中起作用,一旦执行完毕就会销毁。
4. 对象所在的容器被销毁,或从容器中删除对象
>>> a = 3.1415926 >>> sys.getrefcount(a) 2 >>> list_ = [a,1,2,3] >>> sys.getrefcount(a) 3 >>> del list_ >>> sys.getrefcount(a) 2 123456789
相关知识
2019辽宁省考行测数量之边端计数问题(一)
SKYNE/python
【Python】基础
python数据分析与展示
小明准备在阳台种植玫瑰、百合、牡丹和兰花4种盆栽,共种8盆,并且每种花至少种1盆,则小明买盆截的方法共有
python 玫瑰花程序
引用 引用 如何自制水培花卉营养液?
python玫瑰花代码简单
python玫瑰花代码讲解
Python编写玫瑰花
原文链接: python 引用计数问题 https://www.huajiangbk.com/newsview546443.html
| 上一篇: 鸢尾花数据可视化——基于matp... | 下一篇: 鸢尾花数据集分析 |
推荐分享

- 1君子兰什么品种最名贵 十大名... 4135
- 2世界上最名贵的10种兰花图片... 3470
- 3花圈挽联怎么写? 3408
- 4鲜花养护:帝王花的养殖方法以... 3240
- 5迷信说家里不能放假花 家里摆... 1978
- 6明日花キララ:明日花绮罗年度... 1739
- 7香山红叶什么时候红 1590
- 8花的意思,花的解释,花的拼音... 1303
- 9教师节送什么花最合适 1264
- 10勿忘我花图片 1199




