Por que é elementtree.ElementTree.iterparse usando tanta memória?

Eu estou usando elementtree.ElementTree.iterparse para analisar um arquivo xml grande (371 MB).

Meu código é basicamente isto:

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

Minha pergunta é dupla:

Primeiro - Preciso dos dois A e B (ver comentários de trechos de código)? Foi-me dito que root.clear () limpa crianças desnecessárias para que a memória não seja devorada, mas aqui estão minhas observações: usar B e não A é o mesmo que não usar nem em termos de consumo de memória (plotado com gerenciador de tarefas). Usar apenas A parece ser o mesmo que usar os dois.

Segundo - Por que isso ainda está consumindo tanta memória? Conforme o programa é executado, ele usa cerca de 100 MB de RAM no final.

Eu suponho que tenha algo a ver com outf, mas por quê? Não é só escrever no disco? E se estiver armazenando esses dados antes de fechar, como posso evitar isso?

Outras informações: Estou usando o Python 2.7.3 no Windows.