【问题标题】:Iterative version of Python's deepcopyPython deepcopy的迭代版本
【发布时间】:2010-10-11 15:40:03
【问题描述】:

是否存在适用于 Python 2.5.2 的 deepcopy 迭代版本的现有实现?复制模块中可用的 deepcopy 方法是递归的,并且在大树上失败。我无法在运行时安全地增加堆栈限制。

编辑

我确实找到了这个:

http://code.activestate.com/recipes/302535/

我没有测试过,但看起来很有潜力。

【问题讨论】:

  • 哇——你说的树有多大?
  • 几十万小费。我不记得内部节点的总数。
  • 最长分支的深度是多少?
  • 取决于输入数据是什么,树的预期用途是什么,等等......虽然数据集本身是无关紧要的。如果我们现在打破 deepcopy,我们已经达到了扩展能力的极限。在接下来的几年里,我们需要将树木规模扩大几个数量级。
  • 我在一个相对适中的 xml.dom 对象上也遇到了这个问题,该对象是我的一个对象的属性。

标签: python recursion iteration


【解决方案1】:

我不确定这是否有意义。 deepcopy 的重点不是每个对象都会要求它的孩子复制自己吗?

大概你知道你正在复制什么样的对象以及它的子对象是什么样的,所以如果我是你,我会编写自己的函数来复制它。应该不会太难。

【讨论】:

  • 不,应该不难。但是,我们经常达到递归限制。我更喜欢可以处理任意对象的被滥用且健壮的先前实现。
  • 经常,我的意思是我们拥有的任何依赖递归的代码最终都会崩溃。我们已经在将递归代码提交到我们的软件包中设置了一个非正式的块。
  • 致 Ben > 我认为 daniel 想要一个与当前版本相同的 deepcopy 版本,但不会因为太深的树而失败。在迭代中编写逻辑递归算法的过程称为反递归。
【解决方案2】:

也许它可以与Stackless Python 一起使用

【讨论】:

  • 需要在现有的软件平台上正常运行,该平台的 Python/NumPy/matplotlib/C/pyrex 超过 50,000 行,适用于各种架构。如果过渡是无缝的,我会拉屎自己。不过,我同意无堆栈有很多好处。
猜你喜欢
  • 2015-06-19
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
相关资源
最近更新 更多