¿Por qué elementtree.ElementTree.iterparse usa tanta memoria?

Estoy usando elementtree.ElementTree.iterparse para analizar un archivo xml grande (371 MB).

Mi código es básicamente este:

outf = open('out.txt', 'w') 
context = iterparse('copyright.xml')
context = iter(context)
dummy, root = context.next()

for event, elem in context:
    if elem.tag == 'foo':
        author = elem.text

    elif elem.tag == 'bar':
        if elem.text is not None and 'bat' in elem.text.lower():
            outf.write(elem.text + '\n')
    elem.clear()   #line A
    root.clear()   #line B

Mi pregunta es doble:

Primero: ¿Necesito A y B (ver los comentarios del fragmento de código)? Me dijeron que root.clear () elimina niños innecesarios para que la memoria no se devore, pero aquí están mis observaciones: usar B y no A es lo mismo que usar en términos de consumo de memoria (trazado con el administrador de tareas). Usar solo A parece ser lo mismo que usar ambos.

Segundo - ¿Por qué esto sigue consumiendo tanta memoria? A medida que se ejecuta el programa, utiliza cerca de 100 MB de RAM cerca del final.

Supongo que tiene algo que ver con outf, pero ¿por qué? ¿No está simplemente escribiendo en el disco? Y si está almacenando esos datos antes de que se cierre el outf, ¿cómo puedo evitar eso?

Otra información: Estoy usando Python 2.7.3 en Windows.

Respuestas a la pregunta(2)

Su respuesta a la pregunta