不能同时深度复制和附加etree元素

时间:2018-02-12 14:34:39

标签: python xml lxml elementtree deep-copy

我希望有人可以解释这种行为,这让我非常头疼,试图找出我的代码出了什么问题。

假设我们设置了一些简单的etree元素,如此

from copy import deepcopy
from lxml import etree
elem1=etree.Element('e1')
elem2=etree.Element('e2')

如果我这样做,

elem_copy=deepcopy(elem1).append(elem2)

elem_copy出现为NoneType

但是,如果我打破这样的步骤

elem_copy=deepcopy(elem1)
elem_copy.append(elem2)

我通过elem_copyelem2中的新元素作为子元素获得了预期的行为。

任何人都可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:3)

在第一种情况下

elem_copy=deepcopy(elem1).append(elem2)

append的结果,即None被分配回elem_copy

在第二种情况下

elem_copy=deepcopy(elem1)
elem_copy.append(elem2)

append的结果未被分配回elem_copy。因此,elem_copy具有deepcopy返回的元素,并附加第二个元素。

希望有所帮助。