Wie funktioniert die Speicherzuweisung für `dict` in Python?

Gaurav

Ich habe mit Wörterbüchern herumgespielt und das gefunden.

import sys

Square1 = {}
Square2 = {}
Square3 = {}

for i in range(1, 8):
    Square1[i] = i**2

for i in range(1, 11):
    Square2[i] = i**2

for i in range(1, 12):
    Square3[i] = i**2


print(sys.getsizeof(Square1), len(Square1))
print(sys.getsizeof(Square2), len(Square2))
print(sys.getsizeof(Square3), len(Square3))

Ausgabe:

196 7
196 10
344 11

Die Größe der Wörterbuchlängen 7 und 10 ist die gleiche wie 196, aber für die Länge 11 sind es 344. Warum sind sie gleich? Warum steigt die Größe mit der Länge 11? Wie funktioniert die Wörterbuchgröße in Python?

Moinuddin Bilder

Wenn Sie ein leeres Wörterbuch erstellen, ordnet es den Speicher in Blöcken für die ersten paar Referenzen zu, die es speichern kann. Da das Wörterbuch mehr Schlüssel-Wert-Paare hinzufügt, benötigt es mehr Speicher.

Aber es wächst nicht mit jeder Zugabe; Jedes Mal, wenn mehr Speicherplatz benötigt wird, wird ein Teil des Speichers hinzugefügt, der die Anzahl der Schlüssel-Wert-Paare "X" aufnehmen kann. Sobald die Menge "X" gefüllt ist, wird dem Wörterbuch ein weiterer Teil des Speichers zugewiesen.

Hier ist ein Beispielcode zum Anzeigen von Änderungen in der Größe des Wörterbuchs, wenn die Anzahl der Schlüssel zunimmt :

import sys

my_dict = {}
print("Size with {} keys:\t {}".format(0, sys.getsizeof(my_dict)))

for i in range(21):
    my_dict[i] = ''
    print("Size with {} keys:\t {}".format(i+1, sys.getsizeof(my_dict)))

Hier ist die Ausgabe in Python 3.6.2:

#same size for key count 0 - 5 : 240 Bytes
Size with 0 keys:    240
Size with 1 keys:    240
Size with 2 keys:    240
Size with 3 keys:    240
Size with 4 keys:    240
Size with 5 keys:    240

#same size for key count 6 - 10 : 360 Bytes
Size with 6 keys:    368
Size with 7 keys:    368
Size with 8 keys:    368
Size with 9 keys:    368
Size with 10 keys:   368

#same size for key count 11 - 20 : 648 Bytes
Size with 11 keys:   648
Size with 12 keys:   648
Size with 13 keys:   648
Size with 14 keys:   648
Size with 15 keys:   648
Size with 16 keys:   648
Size with 17 keys:   648
Size with 18 keys:   648
Size with 19 keys:   648
Size with 20 keys:   648

Außerdem speichert das Wörterbuch nur eine Speicherreferenz, die die Schlüssel und Werte enthält, und speichert den Schlüsselwert selbst nicht als Teil des dictObjekts. Daher beeinflussen weder der Typ noch die Größe der Daten das Ergebnis sys.getsizeof()für das Wörterbuch.

Zum Beispiel beträgt die Größe der beiden folgenden Dikte 280 Bytes

>>> sys.getsizeof({'a': 'a'})
280

>>> sys.getsizeof({'a'*100000: 'a'*1000000})
280

Hier ist jedoch der Unterschied zwischen der Größe von 'a'V / s 'a' * 1000000:

>>> sys.getsizeof('a')
38

>>> sys.getsizeof('a'*1000000)
1000037

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Wie funktioniert die Speicherzuweisung in Python in diesem Fall?

Wie funktioniert die dynamische Speicherzuweisung?

Wie funktioniert die Speicherzuweisung für "Liste" in Python? Warum entspricht die Größe der Liste nicht der kombinierten Summe ihrer Objekte?

Verstehen, wie Speicherzuweisung funktioniert (LLVM)

Problemumgehung für die Speicherzuweisung

Wie die Speicherzuweisung in Scala erfolgt

(dict | dict 2) - Wie funktioniert der alternative Operator für das Python-Wörterbuch?

Wie funktioniert die Python-Lambda-Erfassungssemantik für Funktionszeiger?

Wie JVM die Thread-Sicherheit der Speicherzuweisung für ein neues Objekt gewährleistet

Warum verhält sich die Speicherzuweisung für positives int gegenüber negativem int in Python anders?

Wie funktioniert die Typinferenz für Methodenaufrufe?

Wie funktioniert dies für die Schleifenbedingung?

Wie funktioniert RandomForestClassifier für die Klassifizierung?

Verursacht die Klassendeklarationsanweisung eine Speicherzuweisung in Python?

Kosten für die statische Speicherzuweisung im Vergleich zur dynamischen Speicherzuweisung in C.

Beschränkungen für die Java-Heap-Speicherzuweisung

Warum verwendet Java Heap für die Speicherzuweisung?

Schnelle Speicherzuweisung für die Echtzeit-Datenerfassung

dynamische Speicherzuweisung im offenen CV für die Videoverarbeitung

Wie funktioniert die Parallelverarbeitung in Python?

Wie funktioniert die Normalisierung in Python?

Wie funktioniert der Python-Iterator für die Liste tatsächlich?

Wie funktioniert eine rekursive Python-Funktion für die Funktion tri_recursion?

Der Python Kalman-Filter für die Mausposition funktioniert nicht wie erwartet

Wie erstelle ich eine Bibliothek, die als gemeinsamer Satz von Importen für Python funktioniert?

Wie funktioniert isinstance in Python für Unterklassen?

Python Wie funktioniert == für float / double?

Warum funktioniert 'dict (Count (Liste)) in Python für Windows nicht?

Wie funktioniert die Rekursion für aktive Muster in F #?

TOP Liste

  1. 1

    Hangfire funktioniert nicht wie erwartet mit ASP.NET Core 3.1

  2. 2

    Konvertiert nicht von Methodengruppe in Func <int>

  3. 3

    Wie berechnet man den Gesamtpreis einer Bestellung mit Rails?

  4. 4

    Identifizieren Sie die Werte der ersten Spalte pro ID und arbeiten Sie basierend auf diesem Wert

  5. 5

    Konvertieren Sie eine Textdatei mit mehreren Trennzeichen in CSV

  6. 6

    So greifen Sie auf eine Variable in einer Singleton-Klasse zu, die von einem Modul in Play 2.5 Scala verwendet wird

  7. 7

    So aktualisieren oder aktualisieren Sie alle Fragmente vom Viewpager Android

  8. 8

    Wie implementiere ich die "equals" -Methode für Generika mit "instanceof"?

  9. 9

    Probleme beim numerischen Integrieren einer multivariablen Funktion WRT einer einzelnen Variablen in Julia (mit hcubature)

  10. 10

    Was ist die idiomatischste Rust-Methode, um ein optionales Element eines Vec bedingt zu ändern?

  11. 11

    Printf gibt Zeichen aus, die über die angegebene Länge des Arrays hinausgehen

  12. 12

    So installieren Sie ein privates NPM-Paket über SSH

  13. 13

    findOneAndUpdate mit Push-Array-Elementen gibt Fehler im Mungo

  14. 14

    So verschieben Sie ein Bild in Flutter/Dart mit einem Draggable

  15. 15

    Verwendung eines Winkelmessers für Leistungstests

  16. 16

    Wie erstelle ich ein Objekt für ein Django-Modell mit vielen zu vielen Feldern?

  17. 17

    Beziehungen auf zusammengesetzten Schlüsseln mit sqlalchemy

  18. 18

    c # itextsharp absolute Textposition mehrzeilig

  19. 19

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  20. 20

    Sind die folgenden 3 Möglichkeiten, Objekte zu definieren, identisch?

  21. 21

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

heißlabel

Archiv