zoukankan      html  css  js  c++  java
  • Python 学习笔记 8.引用(Reference)

    转载自:http://www.xwy2.com/article.asp?id=113

    在 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
    >>>>>>
  • 相关阅读:
    PHP7 快速编译安装
    php访问url的四种方式
    php获取文件 return array数组的值
    thinkphp3.2自定义success及error跳转页面
    think php 访问时
    vtk点云数据的显示[转]
    strlen() 和 sizeof() 在字符串中的使用
    函数 MultiByteToWideChar() 详解
    函数WideCharToMultiByte() 详解
    wchar_t 和 char 之间转换
  • 原文地址:https://www.cnblogs.com/sislcb/p/1284828.html
Copyright © 2011-2022 走看看