引用计数

举个例子说明引用是什么:

a = 1
如上为一个简单的赋值语句,1就是对象,a就是引用,引用a指向对象1。 
同理:
b = 1
b也是对象1的引用。 
通过内置函数id()返回对象的地址。
print id(a) #43220320 print id(b) #43220320
当我们创建多个等于1的引用时,实际上是让所有这些引用指向同一个对象。为了检验两个引用指向同一个对象,我们可以用is关键字。is用于判断两个引用所指向的对象是否相同。
print (a is b) #True
在Python中,整数和短小的字符,Python都会缓存这些对象,以便重复使用。赋值语句,只是创造了新的引用,而不是对象本身。长的字符串和其它对象可以有多个相同的对象,可以使用赋值语句创建出新的对象。每个对象都有存有指向该对象的引用总数,即引用计数(reference count)。 
可以使用sys.getrefcount()获得引用计数,需要注意的是,当使用某个引用作为参数,传递给getrefcount()时,参数实际上创建了一个临时的引用。因此,getrefcount()所得到的结果,会比期望的多1。
from sys import getrefcount

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

b = a
print(getrefcount(b)) # 3
引用计数增加 
1.对象被创建:x=4 
2.另外的别人被创建:y=x 
3.被作为参数传递给函数:foo(x) 
4.作为容器对象的一个元素:a=[1, x, ‘33’]
引用计数减少 
1.一个本地引用离开了它的作用域。比如上面的foo(x)函数结束时,x指向的对象引用减1。 
2.对象的别名被显式的销毁:del x ;或者del y 
3.对象的一个别名被赋值给其他对象:x=789 
4.对象从一个窗口对象中移除:myList.remove(x) 
5.窗口对象本身被销毁:del myList,或者窗口对象本身离开了作用域。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值