• Python内存解析浅学


    1.内存管理

    首先理解变量,和内存特性  

    1. 1.       Python中无须声明变量,
    2. 2.       无须指定类型
    3. 3.       不用关心内存管理
    4. 4.       变量名会被回收
    5. 5.       Del 语句能够释放资源

     

    内存分配

    如定义:

    X=1    默认已经是int型,那他在内存中是怎样的

    1.引用计数器

     

    Xy引用的是同一个对象,都为1,当对象被赋值给其他变量,引用计数器就变为了2

    4种方式,会增加引用计数器

    1. 1.       创建对象

    X=1

    1. 2.       别名被创建

    如:赋值 y=x

    1. 3.       做为参数传递给函数

    参数名(x

    4.成为容器对象的一个元素

       List=[x,y,’ss’]

    2.减少引用

    还是以上的例子:

    X=1

    Y=x

    X=2

    当对象1被创建并赋值给X,它的引用就为1,当增加了别名(应该也可以成为赋值),引用就变成了2Y的引用就为2),不过当x被重新赋值2x对应的引用计数就减1.

     

    什么情况下会减少引用

    1. 1.       本地引用被赋值为其他对象,如x=2
    2. 2.       对象名被销毁

    使用del x ,这是引用计数就为0

    1. 3.       对象从一个窗口对象移除

    函数名.Remove()

     4.窗口对象被销毁

       如刚举例的:List=[x,y,’ss’]

    Del  list

    学习增加引用,和减少引用主要还是要了解他的垃圾回收

    3.垃圾的回收

    当引用计数器变为0时,它就被垃圾回收,这个是我比较浅淡的理解,

    而他回收的过程书中描述有2:以下文字描述提炼来自《Python核心编程》

    1.它会去检查那些引用计数为0的对象,然后清除其在内存的空间。当然除了引用计数为0的会被清除,还有一种情况也会被垃圾收集器清掉:当两个对象相互引用时,他们本身其他的引用已经为0了。

    2、垃圾回收机制还有一个循环垃圾回收器, 确保释放循环引用对象(a引用b, b引用a, 导致其引用计数永远不为0。

    >> x = []

    >>> y = []

    >>> a.append(y)

    >>> b.append(x)

    >>> print a

    [[[...]]]

    >>> print b

    [[...]]

     

  • 相关阅读:
    c++ readIntger writeIntger
    c++ string split function
    uniapp 创建简单的tabs
    c++ 获取和设置 窗口标题
    两种js数组去重的方法
    将jquery和公共样式缓存到localStorage,可以减少Http请求,从而优化页面加载时间
    H5 多个视频 循环播放效果
    使用iScroll时,input等不能输入内容的解决方法
    修改EsayUi 中 tree 的原有样式,变为according 之类的样式 ,且子菜单显示在右侧
    跨浏览器的事件对象-------EventUtil 中的方法及用法
  • 原文地址:https://www.cnblogs.com/chongyou/p/5986024.html
Copyright © 2020-2023  润新知