Почему elementtree.ElementTree.iterparse использует так много памяти?

Я использую elementtree.ElementTree.iterparse для анализа большого (371 МБ) XML-файла.

Мой код в основном это:

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

У меня вопрос двоякий:

Первый. Нужны ли мне A и B (см. Комментарии к фрагменту кода)? Мне сказали, что root.clear () очищает ненужных потомков, так что память не пожирает, но вот мои наблюдения: использование B и не A - то же самое, что использование ни с точки зрения потребления памяти (построено с помощью диспетчера задач). Использование только A похоже на использование обоих.

Второе. Почему это все еще занимает так много памяти? Когда программа работает, она использует около 100 МБ ОЗУ в конце.

Я предполагаю, что это как-то связано с outf, но почему? Разве это не просто запись на диск? И если он хранит эти данные до закрытия outf, как я могу избежать этого?

Дополнительная информация: Я использую Python 2.7.3 на Windows.

Ответы на вопрос(2)

Ваш ответ на вопрос