如何在ipython会话中从内存中恢复变量值



一旦python变量被覆盖,您将如何从内存中恢复它?

也许这会让事情变得容易一点。我目前正在进行一个ipython会话,如:

In [1]: var = method_that_cant_be_reproduced()
In [2]: var = [4, 5, 6]

是否可以以某种方式恢复步骤1中分配给var的值?我想它还没有被垃圾收集。

我也知道一些关于先前值的细节。这是一份清单,我知道它的大小。

使用var = [4, 5, 6]时,名称var被反弹到一个新对象(列表(,并且原始对象丢失(因为不再有任何名称引用它(。因为没有任何内容引用您的原始对象,所以您的问题的答案几乎肯定是no

虽然这可能不是你想要的答案,但有几件事需要从中学习:

  • 如果函数只能运行一次/变量只能生成一次,不要覆盖它,请在其他变量或文件中的某个位置跟踪它
  • 尽量不要出现一个变量只能生成一次的情况(如果您的生成过程出现问题并且源丢失了怎么办?(,在使用源之前先复制它
  • 预料到意想不到的,如果你的电脑崩溃了,你的IPython会话丢失了怎么办?你把结果存放在哪里了吗

所以你犯了一个错误,你仍然可以从中吸取教训,继续前进,知道你不会再犯同样的错误。

根据文档"输入行4的结果可用Out[4]或_4"。

更多详细信息请点击此处。

我喜欢对它们进行pickle以备以后检索,尤其是当我有一个类实例或在使用它进行测试时需要很长时间才能重新创建的东西时。

import pickle
with open('pickled_var', 'wb') as picklefile:
pickle.dump('asdf', picklefile)    
with open('pickled_var', 'rb') as picklefile:
unpickled_var = pickle.load(picklefile)
print(unpickled_var)
asdf

在您的情况下,您可以在它是您想要的值时对其进行pickle,然后只加载"bad"变量以返回到"good"状态。

最新更新