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,被回收)

  • 相关阅读:
    C#基础知识(以宝马,车,车轮为例)
    JAVA之本地图片复制
    JAVA获取PC每个盘符,获取每个盘符总大小,剩余空间大小
    Extjs window autoload
    jquery入门(一)
    extjs 鼠标滑过grid时产生提示grid列中的值
    poi导出
    Extjs 报表同值合并方法
    强大的grep命令
    job
  • 原文地址:https://www.cnblogs.com/jiukun/p/9325468.html
Copyright © 2011-2022 走看看