Функция Python замедляется при наличии большого списка

Я тестировал скорость нескольких различных способов выполнения сложных итераций над некоторыми из моих данных, и я обнаружил кое-что странное. Кажется, что наличие большого списка, локального для некоторой функции, значительно замедляет эту функцию, даже если она не касается этого списка. Например, создание двух независимых списков с помощью двух экземпляров одной и той же функции генератора во второй раз происходит примерно в 2,5 раза медленнее. Если первый список будет удален до создания второго, оба итератора будут работать с одной и той же скоростью.

def f():  
    l1, l2 = [], []  
    for c1, c2 in generatorFxn():  
        l1.append((c1, c2))  
    # destroying l1 here fixes the problem 
    for c3, c4 in generatorFxn():  
        l2.append((c3, c4))

В итоге списки будут иметь длину около 3,1 миллиона элементов каждый, но я видел тот же эффект и с меньшими списками. Первый цикл for выполняется примерно за 4,5 секунды, второй - за 10,5 секунды. Если я вставлю l1 = [] или l1 = len (l1) в позицию комментария, оба для циклов займут 4,5 секунды.

Почему скорость выделения локальной памяти в функции имеет какое-либо отношение к текущему размеру этой функции? Отключение сборщика мусора все исправляет, поэтому должно быть из-за того, что он постоянно работает. Дело закрыто!

6
задан DaveTheScientist 29 April 2011 в 18:37
поделиться