MST

星途 面试题库

面试题:Python中del语句与内存释放的基础关系

在Python中,使用del语句删除一个对象后,内存是否会立即释放?请解释原因,并举例说明。
30.6万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

在Python中,使用del语句删除一个对象后,内存不一定会立即释放。

原因:Python采用了垃圾回收机制(Garbage Collection,GC)来管理内存。del语句只是删除了对象的引用,当对象的引用计数降为0时,Python的垃圾回收器会将其标记为可回收对象,但垃圾回收器不一定会立即执行回收操作,它会在合适的时机(例如当可用内存较低或者达到一定的垃圾回收触发条件时)进行回收,释放内存。

示例:

import sys

class MyClass:
    def __init__(self):
        print("对象被创建")

    def __del__(self):
        print("对象被销毁")


obj = MyClass()
print(sys.getrefcount(obj))  # 获取对象的引用计数,注意这里会比实际引用计数多1,因为getrefcount本身也会创建一个临时引用
del obj
# 这里并不会马上看到 "对象被销毁" 的输出,因为垃圾回收器不一定立即执行回收

在上述代码中,定义了一个MyClass类,在类中定义了构造函数__init__和析构函数__del__。创建对象obj后,获取其引用计数,然后使用del删除对象obj,但析构函数__del__中的内容不一定马上输出,说明内存不一定立即释放。