python的内存管理

python内存管理

主要内容

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

动态类型

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

内存分配

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

引用计数

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

显示销毁对象

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

垃圾收集

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

你可能感兴趣的:(python的内存管理)