在Python中,删除对象和让对象超出范围有什么区别?

2024-09-27 07:30:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用C编写一个多线程Python扩展,它处理了相当多的GIL

在退出时出现了一个问题,类似这样的代码会完全关闭:

from myextension import ExtensionObject

obj = ExtensionObject()
obj.start()
time.sleep(5)
del obj
# Interpreter exits here

但是,如果我从末尾删除del obj并让obj超出范围并自动删除,那么在尝试获取GIL以在其中一个派生线程中执行某些清理时会出现死锁

删除一个对象和让它离开作用域有根本区别吗,特别是当它在程序执行结束时

编辑:还要注意obj = None在这个场景中做的事情与del obj相同


Tags: 代码fromimportobjheretimesleepstart
1条回答
网友
1楼 · 发布于 2024-09-27 07:30:39

这没有根本的区别,因为执行删除操作的总是垃圾收集

  1. 您永远不能删除对象del obj实际上删除的是变量,而不是它所引用的对象
  2. 超出范围是删除对象的唯一方法

通过让变量被其他引用,上述两种情况都可以被克服:

obj = ExtensionObject()
other = obj  # now there are two labels for your instance.
del obj   # now we have lost obj, but 'other' keeps the instance alive.

相关问题 更多 >

    热门问题