lxml.etree._Element.append () de un bucle que no funciona como se esperaba

Me gustaría saber por qué en este códigoappend() parece funcionar desde el interior del bucle, pero el xml resultante muestra la modificación solo desde la última iteración, mientras queremove() Funciona como se esperaba. Este es un ejemplo demasiado simplificado, estoy trabajando con grandes cantidades de datos y necesito agregar el mismo subárbol a muchos padres diferentes.

from lxml import etree

xml = etree.fromstring('<tree><fruit id="1"></fruit><fruit id="2"></fruit></tree>')
sub = etree.fromstring('<apple/>')

for i, item in enumerate(xml):
    item.append(sub)
    print('Fruit {} with sub appended: {}'.format(
        i, etree.tostring(item).decode('ascii')))

print('\nResulting tree after iterating through items with append():\n' +
    etree.tostring(xml, pretty_print=True).decode('ascii'))

for item in xml:
    xml.remove(item)

print('Resulting tree after iterating through items with remove():\n' +
    etree.tostring(xml, pretty_print=True).decode('ascii'))

Salida de corriente:

Fruit 0 with sub appended: <fruit id="1"><apple/></fruit>
Fruit 1 with sub appended: <fruit id="2"><apple/></fruit>

Resulting tree after iterating through items with append():
<tree>
  <fruit id="1"/>
  <fruit id="2">
    <apple/>
  </fruit>
</tree>

Resulting tree after iterating through items with remove():
<tree/>

Salida esperada dedespués de iterar a través de elementos conappend():

<tree>
  <fruit id="1"/>
    <apple/>
  </fruit>
  <fruit id="2">
    <apple/>
  </fruit>
</tree>

Respuestas a la pregunta(1)

Su respuesta a la pregunta