通过局部变量删除全局结构体的Python代码是否能起到实际作用?
你的理解完全正确,这段代码无法实现预期的全局结构体清理功能,确实是代码错误。
Python 中的 del 语句的作用是删除当前作用域内的变量绑定,而非直接删除变量指向的内存对象。上述cleanup函数里的参数x是函数局部作用域的变量,仅持有传入的some_global_structure的引用,执行del x只会移除这个局部变量的绑定、让该对象的引用计数减1,全局作用域下的some_global_structure变量本身仍然存在,其指向的结构体对象也不会被回收或释放,完全达不到清理全局资源的预期。
如果要实现进程退出时清理该全局结构体的效果,正确的写法应该是在清理函数中主动调用结构体对应的资源释放接口,或是直接删除全局作用域下的变量绑定,示例如下:
def cleanup(): global some_global_structure # 若结构体有对应底层资源释放接口可优先调用,例如 some_global_structure.destroy() del some_global_structure atexit.register(cleanup)
内容的提问来源于stack exchange,提问作者Ture Pålsson
相关产品推荐
相关产品推荐

