eine Funktion verwenden erstelle ich eine Liste von Millionen Sendungen innerhalb und prüfen SpeicherverbrauchPython Erinnerung an die Liste in „für“ Schleife
print ('Memory at start: {0} Mb'.format(memory_usage_psutil()))
my_list = people_list(1000000)
print ('Memory at end: {0} Mb'.format(memory_usage_psutil()))
Was ich erhalte, ist:
Memory at start: 100.90625 Mb
Memory at end: 403.8125 Mb
So Erstellen einer Liste und es im Speicher zu halten dauert ~ 300 MB.
Zum Beispiel möchte ich Menge Artikel von my_list
OHNE in TEIL zählen len()
mit
count = 0
additional_list = my_list[0:500000]
for item in additional_list:
count += 1
if count == 499999:
print ('Memory in loop: {0} Mb'.format(memory_usage_psutil()))
und Ergebnisse verwirrt mich.
Ich erwartete, dass das Erstellen zusätzlicher Liste wird Speicherverbrauch um 150 MB erhöhen, aber es ist nicht geschehen. Kannst du erklären warum? Ich meine ids sind verschiedene
In [30]: id(my_list)
Out[30]: 2672641621704
In [31]: id(additional_list)
Out[31]: 2672642905864
und gleiche Ergebnisse stammen aus:
for item in my_list[0:500000]:
count += 1
if count == 499999:
print ('Memory in loop: {0} Mb'.format(memory_usage_psutil()))
Die Liste noch 500000 Adressen auf diese Objekte enthält, die mindestens ein paar MB kosten sollte. –
Ihr letztes Beispiel scheitert für mich. Tatsächlich ist map (id, some_list) == map (id, some_list) '* immer *' False ', da Sie zwei verschiedene 'map' Objekte erstellen. – Bakuriu
@Bakuriu 'map' gibt Ihnen kein' map object', es ist eine Python 'liste' von' long', die der '==' Operator nach Inhalt vergleicht. Sie könnten "map" von etwas anderem in Ihrer Shell überschattet haben? – Meitham