• 第六章 动态类型简介


    #1.
    #A:在python中,类型属于对象而非变量名,每一个对象有两个标准头部信息:一个类型标示符,一个引用的计数器(python中的垃圾收集主要基于引用计数器)
    #B:在python中,每当一个变量名被赋予一个新对象时,之前那个对象若没有被别的变量名或对象引用的话,那么其占用内存就会被释放,这种计数被称为垃圾收集
    #C:在python中,变量总是一个指向对象的指针,而不是可改变的内存区域的标签,给变量赋一个新的值,并不是替换了原始的对象,而是让这个变量去引用了另一个完全不同的对象
    
    #2.sys模块getrefcount()可以得到对象的引用次数
    import sys
    value = sys.getrefcount(1)          #value = 396
    listTem = []
    value = sys.getrefcount(listTem)    #value = 2
    value = sys.getrefcount([])         #value = 1
    
    #3.
    v0 = sys.getrefcount(1)             #v0 = 397
    value0 = 1
    v1 = sys.getrefcount(1)             #v1 = 398
    value1 = 1
    v2 = sys.getrefcount(1)             #v2 = 399
    value0 = 2                          #value0 = 2 value1 = 1
    v3 = sys.getrefcount(1)             #v3 = 398
    #上述代码:value0首先是对象1的引用,而后value1也成为对象1的引用,而后value0指向了其他对象,导致对象1的引用计数减小,但是对象1本身没有变化,所以指向对象1的value1也没有变化
    
    listTem = [1, 2, 3]
    v0 = sys.getrefcount(listTem)       #v0 = 2
    listTem0 = listTem;                 #listTem0 = [1, 2, 3]
    v1 = sys.getrefcount(listTem)       #v1 = 3
    listTem1 = listTem;                 #listTem1 = [1, 2, 3]
    v2 = sys.getrefcount(listTem)       #v2 = 4
    listTem0 = 1;                       #listTem0 = 1 listTem1 = [1, 2, 3]
    v3 = sys.getrefcount(listTem)       #v3 = 3
    listTem1.append(10)                 #listTem1 = [1, 2, 3, 10] listTem = [1, 2, 3, 10]
    #上述代码:listTem0,listTem1指向了listTem所指向的列表对象,导致listTem所指向的列表对象的引用计数增加了2次,后来listTem0指向了另一个对象,导致listTem所指向的对象的引用计数减一
    #再后来listTem1改变了listTem所指向对象的内容,这就反映到了listTem上,导致listTem也一起发生了变化
    

      

  • 相关阅读:
    LoadRunner调用java函数测试oracle
    pam_cracklib.so模块
    crontab定时任务安装、使用方法
    yum的repo文件详解、以及epel简介、yum源的更换
    ubuntu添加开机自启和sysv-rc-conf
    MySQL配置参数详解
    集群管理软件clustershell
    Mysql命令大全
    Nginx配置文件nginx.conf 详解
    linux下iptables配置详解
  • 原文地址:https://www.cnblogs.com/szn409/p/6534545.html
Copyright © 2020-2023  润新知