Python 在使用';del';?

Python 在使用';del';?,python,object,Python,Object,从: 当解释器退出时,不能保证为仍然存在的对象调用\uuu del\uu()方法 这是否意味着列表对象(在本例中为l)即使在解释器退出时也不会被删除?我的意思是当程序退出时,不是所有的对象都被回收了吗 当解释器退出时,不能保证为仍然存在的对象调用\uuu del\uu()方法 此语句意味着您不应依赖解释器退出时执行的自定义\uuu del\uuu()方法 该语句并不意味着解释器将创建内存泄漏 在所有情况下,当Python退出时,所有内存都将被释放 另见 查看解释当解释器退出时,进程使用的

从:

当解释器退出时,不能保证为仍然存在的对象调用
\uuu del\uu()
方法

这是否意味着列表对象(在本例中为
l
)即使在解释器退出时也不会被删除?我的意思是当程序退出时,不是所有的对象都被回收了吗

当解释器退出时,不能保证为仍然存在的对象调用
\uuu del\uu()
方法

此语句意味着您不应依赖解释器退出时执行的自定义
\uuu del\uuu()
方法

该语句并不意味着解释器将创建内存泄漏

在所有情况下,当Python退出时,所有内存都将被释放

另见

查看解释当解释器退出时,进程使用的所有内存都将被释放。仅仅因为
\uuuu del\uuuu
方法可能不会被调用,并不意味着当进程退出时内存将保持不变。@Tom Karzes,但解释器退出时它可能会被调用,对吗?@Brobdingnagian根据你文章中的引语,它可能会被调用,也可能不会被调用。它不能保证被调用。所以你不能依赖它。内存将被释放,因此这不是问题。这是一个问题,你是否希望你的
\uu del\uu
方法做其他事情。这可能取决于解释器的终止方式。如果它收到一个硬杀伤信号,它别无选择,被迫立即退出,不进行清理
del
删除名称<代码>删除对象状态。垃圾收集器释放内存。这三者之间只有间接的联系,彼此都可以独立进行。当Python退出时,内存总是会被释放。引用的段落谈到了进程运行时内存可能会泄漏,但一旦进程退出,其所有内存都会被操作系统回收。这段引用相当误导,即使对CPython来说也是如此
gc.collect()
不是关于未引用的内存,而是关于循环中引用的内存。CPython垃圾收集器处理循环的
\uu del\uu
最近很好(从~Py3.4开始)。对象总是在退出时(内存)被释放,它们可能只是没有最终确定(即
\uu del\uu
'd)。垃圾收集器正是检测和释放循环引用的工具。还有更多…@sepp2k谢谢你的留言。我已经更新了答案。@sepp2k。调用
\uuuu del\uuuu
与执行过程中的内存泄漏无关either@MadPhysicist当我说“引用的段落”时,我指的是这个答案的原始版本中包含的一段引语(这段引语是关于内存泄漏的),而不是问题中的引语。
l = [1, 2, 3]
del l