Python 垃圾回收机制
Python 不像 C++,Java 等语⾔⼀样,Python 可以不⽤事先声明变量类型⽽直接对变量进⾏赋值。对 Python 语⾔来讲,对象的类型和内存都是在运⾏时确定的。这也是为什么我们称 Python 语⾔为动态类型 的原因。 主要体现在下⾯三个⽅法:
1.引⽤计数机制
2.标记-清除
3.分代回收
在 Python 中是如何管理内存的?
垃圾回收:Python 不像 C++,Java 等语⾔⼀样,他们可以不⽤事先声明变量类型⽽直接对变量 进⾏赋值。对 Python 语⾔来讲,对象的类型和内存都是在运⾏时确定的。这也是为什么我们称 Python 语⾔为动态类型的原因(这⾥我们把动态类型可以简单的归结为对变量内存地址的分配是在运 ⾏时⾃动判断变量类型并对变量进⾏赋值)。
引⽤计数:Python 采⽤了类似 Windows 内核对象⼀样的⽅式来对内存进⾏管理。每⼀个对象,都维 护这⼀个对指向该对对象的引⽤的计数。当变量被绑定在⼀个对象上的时候,该变量的引⽤计数就是 1,(还有另外⼀些情况也会导致变量引⽤计数的增加),系统会⾃动维护这些标签,并定时扫描,当某标 签的引⽤计数变为 0 的时候,该对就会被回收。
当退出 Python 时是否释放所有内存分配?
不是的,循环引⽤其他对象或引⽤⾃全局命名空间的对象的模块,在 Python 退出时并⾮完全释 放。另外,也不会释放 c 库保留的内存部分。