Ich war Python-Skripte ausführen, die mehrere Anrufe auf einige Funktionen machen, sagen F1 (x) und F2 (x), die ein bisschen wie folgt aussehen:Statischer Speicher in Python: Erstellen Schleifen neue Instanzen von Variablen im Speicher?
x = LoadData()
for j in range(N):
y = F1(x[j])
z[j] = F2(y)
del y
SaveData(z)
Leistung ist viel schneller, wenn ich halten die "del y" -Linie. Aber ich verstehe nicht, warum das so ist. Wenn ich nicht "del y" benutze, dann habe ich schnell keinen RAM mehr und muss auf virtuellen Speicher zurückgreifen, und alles wird langsam zum Crawlen. Buy, wenn ich "del y" verwende, dann spüle ich wiederholt und ordne den Speicher für y neu. Was ich gerne tun würde, ist, dass Sie als statischer Speicher sitzen und den Speicher bei jedem F1 (x) -Aufruf wiederverwenden. Aber von dem, was ich sagen kann, passiert das nicht.
Auch nicht sicher, ob es relevant ist, aber meine Daten bestehen aus numpy Arrays.
Diese Frage geht wahrscheinlich davon aus, dass y zuerst innerhalb der Schleife deklariert wird, ich hätte dies erwähnen sollen. Fühlen Sie sich frei, diesen Aspekt der Frage zu kommentieren! –
Wenn Sie das explizite 'del y' nicht mögen, dann extrahieren Sie den Schleifenkörper in eine Funktion. Auf diese Weise werden alle Variablen innerhalb der Schleife automatisch für jede Iteration bereinigt. – Duncan