• python参考手册--第3章类型和对象


    1.对象的身份、类型、值

    (1)身份:对象在内存中位置的指针,地址值,

    >>> a = [1,2,3,4,5]

    >>> id(a)
    48497328

    >>> id(a[0])
    37465112
    >>> id(a[1])
    37465100
    >>> id(a[2])
    37465088
    >>> id(a[3])
    37465076
    >>> id(a[4])
    37465064

    (2)类型

    >>> a = [1,2,3,4,5]

    >>> type(a)
    <type 'list'>
    >>> type(a[1])
    <type 'int'>

    isinstance:

    >>> isinstance(a,list)
    True

    (3)值

    print看

    2.引用计数和垃圾回收

    (1)引用计数

    a = [1,2,3,4,5] #创建list对象,a是list对象的引用

    b = a #list对象的引用加1

    del a  #list对象的引用减1

    b = 2 #该list对象的引用再减1

    可以通过sys.getrefcount() 函数获得对象的引用计数:

    >>> import sys
    >>> a = [1010,1023,1394]
    >>> sys.getrefcount(a)
    2
    >>> b = a
    >>> sys.getrefcount(b)
    3
    >>> sys.getrefcount(a)
    3

    (2)垃圾回收

    当一个对象的引用计数归零时,将会被垃圾收集回收。

    (3)不可变对象的赋值,会创建副本;而可变对象的赋值不会创建副本

    不可变对象赋值:

    >>> a = 20
    >>> b = a
    >>> b is a
    True
    >>> b = 30
    >>> a
    20

    可变对象赋值:

    >>> a = [1,2,3,[4,5]]
    >>> b = a
    >>> b is a
    True
    >>> b[0] = 10
    >>> b
    [10, 2, 3, [4, 5]]
    >>> a
    [10, 2, 3, [4, 5]]

    list的反向遍历:

    for i in lista[::-1]

    通过引用修改对象,该对象的其他引用也会被修改:

    >>> import sys
    >>> a = [1010,1023,1394]
    >>> sys.getrefcount(a)
    2
    >>> b = a
    >>> sys.getrefcount(b)
    3
    >>> sys.getrefcount(a)
    3
    >>> b[1] = 99999
    >>> b
    [1010, 99999, 1394]
    >>> a
    [1010, 99999, 1394]
    >>> b is a

    (4)list、dict的浅拷贝和深拷贝:

    浅拷贝将创建一个新对象,对象的元素是原对象元素的引用。

    >>> a = [1,2,3,[4,5]]
    >>> b = list(a)
    >>> b is a
    False
    >>> b[1] = 1000
    >>> b
    [1, 1000, 3, [4, 5]]
    >>> a
    [1, 2, 3, [4, 5]]

    >>> b[3][1] = 9999
    >>> b
    [1, 1000, 3, [4, 9999]]
    >>> a
    [1, 2, 3, [4, 9999]]

    深拷贝:创建一个新对象,对象的元素也是新建的对象,而不是原对象元素的引用。通过b = copy.deepcopy(a)实现:

    >>> a = [1, 2, 3, [4, 9999]]
    >>> import copy
    >>> b = copy.deepcopy(a)
    >>> b[3][0] = 100000
    >>> b
    [1, 2, 3, [100000, 9999]]
    >>> a
    [1, 2, 3, [4, 9999]]

    3.第一类对象

    >>> items = dict()
    >>> items['func'] = abs
    >>> import math
    >>> items['module'] = math
    >>> items['func'](-9)
    9
    >>> items['module'].sqrt(4)
    2.0

    4.字符串

    (1)format()

    >>> a = "your name is {0}, and age is {1}"
    >>> a.format('Jack',25)
    'your name is Jack, and age is 25'

    5.集合

    (1)set

    可变集合

    (2)frozenset

    不可变集合

    6.绑定方法及非绑定方法

    (1)绑定方法

    调用时需要为self传参

    (2)非绑定方法

    不用为self传参

    7.常用属性

    (1)函数的常用属性

    f.__doc__

    f.__name__

    f.__code__

    f.__dict__

    f.__defaults__

    f.__globals__

    f.__closure__

    (2)类的常用属性

    t.__doc__

    t.__name__

    t.__bases__

    t.__dict__

    t.__module__

    (3)模块的常用属性

    m.__doc__

    m.__name__

    m.__file__

    m.__dict__

    m.__path__

    8.解释器内置对象类型

    (1)代码对象:编译之后的可执行的字节码,compile()返回

    (2)帧对象:表示执行帧,多出现在跟踪对象中。

    (3)跟踪对象:出现异常时会创建跟踪对象,包含栈跟踪信息(可通过sys.exc_info()获取)

    (4)生成器对象:包含yield

    (5)切片对象:序列等进行切片操作时使用

    (6)Ellipsis对象:用于表示索引操作[]中省略号(...)是否存在。

    9.对象的创建、初始化、销毁

    (1)创建:__new__()

    (2)初始化:__init__()

    (3)销毁:__del__()

    通常new、del在元类中有定义,用户自定义类继承就可以,如果要销毁时关闭连接或者锁,可以重写del函数。

    a = A(args)  #先调用了__new__(),然后判断isinstance(a,A),再调用__init__()  

    10.repr、eval

    (1)repr:返回一个表达式字符串

    (2)eval:执行该表达式字符串

    10.迭代

    >>> a = [1,2,3,7,8,9,32,45,87]
    >>> b = a.__iter__()
    >>> while True:
    try:
    print b.next()
    except StopIteration:
    break


    1
    2
    3
    7
    8
    9
    32
    45
    87

     

  • 相关阅读:
    安装dumpling
    安装binlog(pump)
    安装部署lightning
    dumping备份成csv并使用lightning恢复
    Datax学习指南(五) 进阶datax web
    【转】PgSql删除数据库报错处理
    Spring Batch (一) 理论介绍
    frp简易配置
    Spring底层核心原理解析
    cuda、torch、torchvision对应版本以及安装
  • 原文地址:https://www.cnblogs.com/DjangoBlog/p/3523808.html
Copyright © 2020-2023  润新知