【发布时间】:2014-03-28 08:37:18
【问题描述】:
这个问题与我昨天发布的another question 有关,虽然它本质上更笼统。
由于我提到的线程,我一直在尝试确定哪些对象可以复制、腌制、封送,哪些对象不能。
在此过程中,我偶然发现了这个谜题:
new_obj = copy.deepcopy(my_obj)
function_that_uses_my_new_obj(new_obj)
抛出:
function_that_uses_my_new_obj(new_obj)RuntimeError: 内部 C++ 对象 (Pyside.QtGui.QWidget) 已删除
现在,由于 my_obj 是 一个 C++ 对象,我可以理解这个错误。这个特定问题的原因是另一个线程的主题。
但是,当我尝试时:
function_that_uses_my_new_obj(copy.deepcopy(my_obj))
我什么都没得到。程序正常运行到这一行,停在那里几秒钟并停止执行,该行之后的代码没有运行,没有抛出异常/错误/警告,Python提示符准备接受任何新命令。
编辑
由于某种原因,使用copy() 方法而不是deepcopy() 像这样:
function_that_uses_my_new_obj(copy.copy(my_obj))
导致抛出相同的异常。所以必须有某个时刻deepcopy 决定停止或正在停止并触发执行结束。我不明白为什么没有提出任何通知用户...
【问题讨论】:
标签: python debugging copy pyside deep-copy