python内存管理
主要内容
- 变量不需要声明
- 变量不需要指定类型
- 程序员不用关心内存管理
- 变量名会被“回收”
- del语句能够直接释放资源
动态类型
python语言中,对象的类型和内存占用都是运行时确定的,在创建赋值的时候,解释器会根据语法和右侧的操作数来决定新对象的类型。在创建对象后,一个该对象的应用会被赋值给左侧的变量。
内存分配
python解释器承担了内存管理的复杂任务
引用计数
#####引用计数加1
当对象被创建并赋值给变量时,对象的引用计数就被设置为1
当同一个对象被创建并将其赋值给另外其他变量时,则该引用计数再加1
(同理 作为参数传递给函数,方法或者类的实例,改对象的引用计数加1)
#####引用计数减1
当对象的引用被销毁时,引用计数会减小。比如函数运行结束时,所有的局部变量都被自动销毁,对象的引用计数也就随之减少
显示销毁对象
del (对象名)
del语句:
del一个对象,会将在线的名称空间洪的对象删除,并且赋值给该对象的对象的引用计数减1
垃圾收集
不再使用的内存会被一种叫做垃圾收集的机制释放。解释器负责跟踪对象的引用计数,垃圾回收器负责释放内存。垃圾回收器是一块独立的代码,他用来寻找引用计数为0的对象,特殊的场景下会出现循环引用。
关于循环引用
一个循环引用发生的条件:至少两个对象相互引用时,也就是所有引用都消失时,这些引用仍然存在。这说明只靠引用计数是不够的。
python中的垃圾回收器包含两个部分:一个引用计数器和一个循环垃圾回收器。
+当一个对象的引用计数为0时,解释器会暂停,释放这个对象和仅有这个对象可访问的其他对象
+循环垃圾回收器负责哪些分配总量很大的,未能通过引用计数销毁的哪些对象