zoukankan      html  css  js  c++  java
  • python学习之内存机制

    不可变对象(字符串、元组)

    1. a = 1

    首先在内存中创建对象1,并记录对象的引用计数为1次。

    id(a) 查看变量a引用的对象的内存地址

    2. b = 1

    内存中已存在对象1,变量b引用对象1,则对象1的引用计数为2次。

    id(b) 变量b和变量a引用的是同一个对象,内存地址相同。

    3. a = a + 1

    在内存中创建对象2,变量a不再引用原有对象1(引用次数减为1),开始引用对象2(引用次数增为1)

    a = 1 重新执行a=1,a依然指向原有对象(因为还是1)

    注意:仅对短字符有效,长字符串每次new对象,即便相同,也会重新建立内存;
    这里目前没有查到相关资料,但确实如此。
    

    可变对象(数组、字典、集合)

    1. a = []

    在内存中创建数组对象,记录对象引用次数为1次(被a引用)

    2. b = []

    在内存中重新创建新对象,记录对象引用次数为1次(被b引用),a和b所在内存地址不相同

    3. a.append(1)

    a依然指向原有的内存地址,因为是可变对象,所以不需要在内存中重建新对象

    4. a = []

    重新在内存创建可变对象[],a不再指向原有对象(引用次数变为0,被回收)

  • 相关阅读:
    gitlab
    MySQL千万级别大表,你要如何优化?
    kafka入门
    zookeeper的原理和应用
    MySQL 性能优化之慢查询
    Redis一些新的看法
    mysql 数据库锁
    MYSQL查看进程和kill进程
    hadoop批量命令脚本xcall.sh及jps找不到命令解决
    java stream 处理分组后取每组最大
  • 原文地址:https://www.cnblogs.com/jiukun/p/9325468.html
Copyright © 2011-2022 走看看