MST

星途 面试题库

面试题:Python中垃圾回收机制的主要方法有哪些

请简述Python垃圾回收机制中的引用计数法和分代回收法的基本原理及工作方式。
12.1万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

引用计数法

  1. 基本原理:Python 中的每个对象都有一个引用计数,记录当前对象被引用的次数。当一个对象的引用计数变为 0 时,该对象就可以被垃圾回收。
  2. 工作方式
    • 当创建一个新对象时,它的引用计数初始化为 1。例如 a = 10,对象 10 的引用计数为 1。
    • 当对象被其他变量引用时,引用计数增加。如 b = a,对象 10 的引用计数变为 2。
    • 当对象的引用被删除时,引用计数减少。例如 del a,对象 10 的引用计数减为 1。
    • 当对象的引用计数为 0 时,Python 解释器会立即回收该对象所占用的内存空间。

分代回收法

  1. 基本原理:分代回收基于这样一个假设,即存活时间越久的对象,越有可能继续存活下去。Python 将对象根据存活时间划分为不同的代(一般分为 0 代、1 代、2 代),垃圾回收器在回收时,对不同代采用不同的回收频率,新创建的对象在 0 代,经过一定次数垃圾回收仍存活的对象会晋升到更高的代。
  2. 工作方式
    • 对象创建与代的归属:新创建的对象都放在 0 代链表中。
    • 垃圾回收触发:当某一代中的对象数量达到一定阈值时,就会触发针对这一代的垃圾回收。例如 0 代对象数量达到阈值,就开始对 0 代对象进行垃圾回收。
    • 回收过程:垃圾回收器扫描这一代中的所有对象,标记存活的对象,然后回收未标记的对象(即垃圾对象)。在扫描过程中,如果发现 0 代中的对象存活,就将其移动到 1 代链表中;同理,1 代中的对象在经过垃圾回收仍存活会移动到 2 代链表中。2 代是最高代,对象晋升到 2 代后,不会再晋升。而且对较高代的垃圾回收频率低于较低代,因为较高代的对象存活可能性更大。