首页 > 解决方案 > 如何在 ipython 会话中从内存中恢复变量值?

问题描述

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

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

In [1]: var = method_that_cant_be_reproduced()

In [2]: var = [4, 5, 6]

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

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

标签: pythongarbage-collectionipython

解决方案


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

虽然这可能不是您想要的答案,但可以从中学到几件事:

  • 如果一个函数只能运行一次/变量只能生成一次,不要覆盖它,在另一个变量或文件中跟踪它
  • 尽量不要出现一个变量只能生成一次的情况(如果你的生成过程有问题并且源丢失了怎么办?),在使用之前复制你的源
  • 预料到意外,如果您的计算机崩溃并且您的 IPython 会话丢失了怎么办?您是否将结果存储在任何地方?

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


推荐阅读