引用次数的问题

引用次数的问题

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

登陆购买课程后可参与讨论,去登陆

2回答
好帮手乔木 2020-01-12 10:33:50

同学你好:

1、对一个不可变数据对象(字符串,数字,元组)用到的次数,比如5645465456这个数据,它被引用到的次数就叫做引用计数。比如a=5645465456,在变量a创建的时候,计算机不会直接在内存中创建一个空间来保存5645465456,而是找到已有的5645465456,指针指向5645465456,这样a可以找到5645465456,节约内存,假如这时候b=5645465456,引用计数加一。

如下图:

5645465456的内存地址的指针为3,a引用一次加1,b引用一次加1,c再引用一次加1,所以结果为6。

http://img1.sycdn.imooc.com//climg/5e1a81ce09e2f13303630381.jpg

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]的变量。

如果我解决了同学的问题,请采纳!学习愉快^_^。


  • print(sys.getrefcount(a)) # 6 print(sys.getrefcount(b)) # 6 这两个的输出为啥是6呢?getrefcount()函数不是会增加一次引用吗?
    2020-03-21 18:27:45
提问者 weixin_慕UI515575 2020-01-10 22:44:07

a = [1, 2, 3]
b = a
print(getrefcount(b))
del a
print(getrefcount(b))

还有这个,怎么是3, 2 。删除了a, 相当于a没有定义,b=a还能算引用一次?

  • 同学,你好。b=a把a的值赋值给了b,b是[1,2,3],删除a后,b的值不变, [1, 2, 3]还是被b引用了。
    2020-03-22 18:26:56
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师