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?
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 dict
Objekts. 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.
Lass mich ein paar Worte sagen