注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

互联网产品经理的窝

梦想社:一个人为了梦想,始终没有停下自己的脚步

 
 
 

日志

 
 

Python 学习笔记 - 8.引用(Reference)  

2013-05-19 00:10:54|  分类: python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在 Python 中没有值类型、引用类型之类的区别。所有变量都只是指向对象内存地址的引用,而所有的对象都有一个唯一的序号,以及类型和值。对象类型并不能被修改,我们修改的不过是引用的内容而已。

 

Code
>>>>>> a = 1
>>>>>> b = 1

>>>>>>
hash(a)
1

>>>>>>
hash(b)
1

>>>>>>
id(a)
11228576

>>>>>>
id(b)
11228576

 

我们可以使用 sys.getrefcount() 查看对象引用计数。

 

Code
>>>>>> import sys
>>>>>> class
Class1:
pass


>>>>>> a =
Class1()
>>>>>>
sys.getrefcount(a)
2

>>>>>> b =
a
>>>>>>
sys.getrefcount(b)
3

>>>>>>

 

我们可以进行 Shallow copy 或者 Deep Copy。

 

Code
>>>>>> class Data:
pass


>>>>>> class
Class1:
def __init__
(self):
self.Data
=
Data()


>>>>>> a =
Class1()
>>>>>> import
copy
>>>>>> b =
copy.copy(a)
>>>>>> a is
b
False
>>>>>> a.Data is
b.Data
True
>>>>>> c =
copy.deepcopy(a)
>>>>>> c is
a
False
>>>>>> c.Data is
a.Data
False
>>>>>>

 

weak reference

弱引用使用的机会不是很多,一般用来进行 cache 编程。我们可以使用 weakref.ref() 来创建一个弱引用。

 

Code
>>>>>> import sys
>>>>>> import
weakref
>>>>>> class
Class1:
def
Foo(self):
print "Foo"



>>>>>> o =
Class1()
>>>>>>
sys.getrefcount(o)
2

>>>>>> r = weakref.ref(o) # 创建一个弱引用

>>>>>> sys.getrefcount(o) # 引用计数并没有改变
2
>>>>>>
r
<weakref at 01295840; to 'instance' at 00DC48A0>

>>>>>> o2 = r() # 获取弱引用所指向的对象

>>>>>> o2 is o
True
>>>>>>
sys.getrefcount(o)
3

>>>>>> o =
None
>>>>>> o2 =
None
>>>>>> r # 当前对象引用计数为零时,弱引用失效

<weakref at 01295840; dead>
>>>>>>

 

weakref 还提供了一个 proxy()。

 

Code
>>>>>> import sys
>>>>>> import
weakref
>>>>>> class
Class1:
def
Foo(self):
print "Foo"



>>>>>> def
callback(self):
print "callback"



>>>>>> o =
Class1()
>>>>>> p =
weakref.proxy(o, callback)
>>>>>>
p.Foo()
Foo
>>>>>> o =
None
callback
>>>>>>
  评论这张
 
阅读(195)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017