Warum verwendet elementtree.ElementTree.iterparse so viel Speicher?

Ich verwende elementtree.ElementTree.iterparse, um eine große (371 MB) XML-Datei zu analysieren.

Mein Code lautet im Grunde:

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

Meine Frage ist zweifach:

Erstens: Brauche ich sowohl A als auch B (siehe Code-Snippet-Kommentare)? Mir wurde gesagt, dass root.clear () unnötige Kinder löscht, damit der Speicher nicht verschlungen wird. Aber hier sind meine Beobachtungen: B und nicht A zu verwenden, ist das Gleiche wie weder in Bezug auf den Speicherverbrauch zu verwenden (aufgezeichnet mit dem Task-Manager). Nur A zu verwenden, scheint dasselbe zu sein wie beides.

Zweitens: Warum verbraucht das immer noch so viel Speicher? Während das Programm ausgeführt wird, werden gegen Ende ca. 100 MB RAM verbraucht.

Ich nehme an, es hat etwas mit outf zu tun, aber warum? Schreibt es nicht einfach auf die Festplatte? Und wenn diese Daten gespeichert werden, bevor outf geschlossen wird, wie kann ich das vermeiden?

Weitere Informationen: Ich verwende Python 2.7.3 unter Windows.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage