gpt4 book ai didi

python - 引用计数降为零后多久调用 `__del__`?

转载 作者:太空狗 更新时间:2023-10-30 01:41:42 25 4
gpt4 key购买 nike

__del__ 方法在引用计数达到零后多久被调用?该语言是否保证在任何其他使用代码可以执行之前立即完成?或者每个实现都可以做它喜欢的事情,可能会延迟对 __del__ 任意长的调用?

请忽略程序即将退出的情况(我假设这意味着给定 block 中的最后一条语句已完成,并且堆栈为空)。我知道在这种情况下,没有关于 __del__ 的 promise ;它甚至可能根本不会被调用。

此外,我知道由于周期等原因,引用计数可能不为零。我在这里并不担心(我正在问一个单独的问题)。

最佳答案

Python 不保证 __del__ 何时被调用,或者它是否被调用。事实上,如果对象是引用循环的一部分,__del__ 方法不太可能被调用,因为即使循环作为一个整体被清除,Python 也无法决定在哪里中断引用循环以及应该以什么顺序调用 __del__ 方法(如果有)。由于 __del__ 相当古怪的语义(为了调用 __del__ 对象的引用计数暂时增加,并且 __del__ 方法可以防止通过将引用存储在其他地方来破坏对象)在其他实现中发生的事情有点胡扯。 (我不记得当前 Jython 中的确切细节,但它在过去已经更改过几次。)

也就是说,在 CPython 中,if __del__ 被调用,一旦引用计数降为零,它就会被调用(因为引用计数是唯一的方法 __del__ 方法被调用,CPython 调用 __del__ 的唯一机会是当实际的引用计数被更改时。)

关于python - 引用计数降为零后多久调用 `__del__`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9796643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com