python的内存管理

作者: junson | 来源:发表于2016-07-09 16:05 被阅读210次

    python内存管理

    主要内容

    • 变量不需要声明
    • 变量不需要指定类型
    • 程序员不用关心内存管理
    • 变量名会被“回收”
    • del语句能够直接释放资源

    动态类型

    python语言中,对象的类型和内存占用都是运行时确定的,在创建赋值的时候,解释器会根据语法和右侧的操作数来决定新对象的类型。在创建对象后,一个该对象的应用会被赋值给左侧的变量。
    

    内存分配

    python解释器承担了内存管理的复杂任务
    

    引用计数

    #####引用计数加1
    当对象被创建并赋值给变量时,对象的引用计数就被设置为1
    当同一个对象被创建并将其赋值给另外其他变量时,则该引用计数再加1
    (同理 作为参数传递给函数,方法或者类的实例,改对象的引用计数加1)
    #####引用计数减1
    当对象的引用被销毁时,引用计数会减小。比如函数运行结束时,所有的局部变量都被自动销毁,对象的引用计数也就随之减少
    

    显示销毁对象

      del (对象名)
      del语句:
                   del一个对象,会将在线的名称空间洪的对象删除,并且赋值给该对象的对象的引用计数减1
    

    垃圾收集

    不再使用的内存会被一种叫做垃圾收集的机制释放。解释器负责跟踪对象的引用计数,垃圾回收器负责释放内存。垃圾回收器是一块独立的代码,他用来寻找引用计数为0的对象,特殊的场景下会出现循环引用。
    
    关于循环引用
     一个循环引用发生的条件:至少两个对象相互引用时,也就是所有引用都消失时,这些引用仍然存在。这说明只靠引用计数是不够的。
     python中的垃圾回收器包含两个部分:一个引用计数器和一个循环垃圾回收器。
     +当一个对象的引用计数为0时,解释器会暂停,释放这个对象和仅有这个对象可访问的其他对象
     +循环垃圾回收器负责哪些分配总量很大的,未能通过引用计数销毁的哪些对象
    

    相关文章

      网友评论

        本文标题:python的内存管理

        本文链接:https://www.haomeiwen.com/subject/ehnrjttx.html