引用次数的问题
a = 5645465456
b = a
c = b
print(sys.getrefcount(a)) # 6
print(sys.getrefcount(b)) # 6
这结果不应该是4 ,4吗,怎么是 6,把a改成字符串也是6,只有改成列表结果才是是4,上面的代码6次具体是哪6次?
正在回答 回答被采纳积分+1
同学你好:
1、对一个不可变数据对象(字符串,数字,元组)用到的次数,比如5645465456这个数据,它被引用到的次数就叫做引用计数。比如a=5645465456,在变量a创建的时候,计算机不会直接在内存中创建一个空间来保存5645465456,而是找到已有的5645465456,指针指向5645465456,这样a可以找到5645465456,节约内存,假如这时候b=5645465456,引用计数加一。
如下图:
5645465456的内存地址的指针为3,a引用一次加1,b引用一次加1,c再引用一次加1,所以结果为6。
2、del函数删除引用计数,不释放内存。a=[1,2,3]的意思是[1,2,3]的引用是变量a。b=a是[1,2,3]又多了一个变量b的引用。删除变量a,其实是删除了a对[1,2,3]的引用。但是没有删除b对[1,2,3]的引用。因此计数为2。
a和b只是一个引用[1,2,3]的变量。
如果我解决了同学的问题,请采纳!学习愉快^_^。
a = [1, 2, 3]
b = a
print(getrefcount(b))
del a
print(getrefcount(b))
还有这个,怎么是3, 2 。删除了a, 相当于a没有定义,b=a还能算引用一次?
- 参与学习 人
- 提交作业 2727 份
- 解答问题 8160 个
想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星