如何深度复制Python的堆栈帧对象

时间:2017-01-30 04:51:32

标签: python copy deep-copy pdb stackframe

我正在寻找python堆栈框架的深层副本,因为我正在对Python的调试器(PDB)进行更改。

curframe = self.get_stack(self.__f, self.__t)[0][self.curindex][0]
curframe_locals = copy.deepcopy(curframe.f_locals) # This line fails
# ERROR: *** TypeError: TypeError('object.__new__(NotImplementedType) is not safe, use NotImplementedType.__new__()',)
curframe_globals = curframe.f_globals

哪里

__f = <frame object at 0x10185fad0>
__t = None

但根据副本库,在此处找到:ftp://ftp.eso.org/scisoft/scisoft4/linux/redhat9/python/lib/python2.2/copy.py

  

此版本不会复制模块,类,函数,方法等类型,   也没有堆栈跟踪,堆栈框架,文件,套接字,窗口,也没有数组   任何类似的类型。

我的问题是我运行的程序在执行代码之前评估表达式,例如:

a = []
a.append(1) # This gets called twice, but I only want the affect to happen once.
# The program starts up a PDB instance and evaluates the lines execution and  
# maintains the results.

我仍然想确保我进行评估,但需要对堆栈框架进行深层复制,以便评估不会导致不必要的更改,我可以采用哪种方式进行评估?

我正在考虑一个解决方案,我只是执行该过程并让它为我做深层复制,但我不确定这是否有效并且我需要管道输出回到父母那里。

谢谢!

0 个答案:

没有答案