zoukankan      html  css  js  c++  java
  • python中的内存管理

    不像大多数编译型语言,变量必须在使用之前声明名字和类型,在python中,变量在第一次被赋值时自动声明。在变量创建时,python解释器会根据语法和右侧的操作数来决定新对象的类型,在对象创建后,一个该对象的引用会被赋值给左侧的变量。对于内存管理的任务,由python解释器操作。

    引用计数

    python采用引用计数的技术来记录所有使用中的对象各有多少引用,当一个对象被创建时,就创建了一个引用计数,当这个对象不再需要时,也就是说,这个对象的引用计数变为0时,它被垃圾回收。

    1.引用计数增加的情况

    a = 1

    b = a

    赋值并不是直接将一个值赋给一个变量,在python中,对象时通过引用传递的。在赋值时,不管这个对象是被新创建的,还是一个已经存在的,都是将该对象的引用(而不是值)赋值给变量。也就是说a,b两个变量名指向同一个对象,通过 id() 可以确定。

    可以看到a,b指向同一个地址。对象被创建并赋值给变量时,该对象的引用计数被设置为1。当同一个对象的引用增加时引用计数会随着增加1,我们通过使用sys包中的getrefcount()函数来查看某个对象的引用计数,(调用getrefcount()时对象回创建一个新的引用,所以返回的值应该比原有的多1)。

    对象引用计数增加的情况:

    •   对象被创建:x = 1
    •   对象另外的别名被创建:y = x
    •   被作为参数传递给函数(新的本地引用):func(x)
    •   成为容器对象的一个元素:l = [1,2,x]

    2、引用计数减少的情况

    当对象的引用被销毁时,它的引用计数会自动减1;

    •   一个本地引用离开了起作用范围。比如函数结束时  
    •   对象的别名被显式销毁:del x 
    •   对象的一个别名被赋值给其他对象:x = 123  
    •   对象被从一个容器对象中移除:l.remove(x)  
    •   容器本身被销毁:del l

    垃圾收集

    不再使用的内存会被一种成为垃圾收集的机制释放。解释器跟踪对象的引用计数,垃圾收集器负责释放内存。垃圾收集器是一块独立代码,它用来寻找计数为0的对象,但也负责检查那些引用计数大于0但应该被销毁的对象。特定情形会导致循环引用。

    python垃圾处理机制仅靠引用计数和垃圾收集器是不够的,真正的要复杂的多,学了再更新。

  • 相关阅读:
    win10删除了应用商店重新安装,应用商店报错不能联网下载
    bps,Bps,pps,fps单位换算
    mongodb查不出数据
    ps切图
    ppt常用设置
    视频录制
    excel设置下拉
    小程序开发
    手把手从0搭建hexo博客
    两种方式实现登录跳转新窗体
  • 原文地址:https://www.cnblogs.com/mzct123/p/6027770.html
Copyright © 2011-2022 走看看