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明日花キララ:明日花绮罗年度... 23238
- 2明日花キララ(明日花绮罗)经... 13621
- 3家庭养花知识大全 家庭养花有... 9037
- 4家庭养花风水知识 家庭养花“... 8754
- 5兰花叶子扭的是什么兰 8715
- 6君子兰什么品种最名贵 十大名... 7992
- 7十大致癌花卉排行榜,哪些花卉... 7655
- 8五月天婷婷开心六月丁香:音乐... 7648
- 9秋天养花,掌握这5点养花知识... 7326
- 10【花卉知识 】养花须知:新手... 6927




