"Sys.getsizeof (int)" gibt einen unverhältnismäßig großen Wert zurück?
Möchte ich überprüfen Sie die Größe der int-Datentyp in python:
import sys
sys.getsizeof(int)
Kommt es zur "436", das macht keinen Sinn für mich.
Auf jeden Fall möchte ich wissen, wie viele bytes (2,4,..?) int dauert auf meinem Rechner.
InformationsquelleAutor der Frage Hailiang Zhang | 2012-04-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die kurze Antwort
Sich die Größe der Klassenicht von einer Instanz der Klasse. Rufen Sie
int
um die Größe einer Instanz:Wenn, die Größe scheint immer noch ein bisschen zu groß, denken Sie daran, dass eine Python
int
ist sehr Verschieden von einemint
im (Z) c. In Python, einint
ist ein vollwertiges Objekt. Dies bedeutet, dass es extra Aufwand.Jedes Python-Objekt enthält mindestens eine wurde und einen Verweis auf den Typ des Objekts zusätzlich zu anderen Speicher; auf einem 64-bit-Maschine, die 16 bytes! Die
int
Interna (bestimmt durch die standard CPython-Implementierung) haben auch im Laufe der Zeit verändert, so dass die Menge an zusätzlichem Speicherplatz hängt von Ihrer version.Einige details über
int
Objekte in Python 2 und 3Hier ist die situation in Python 2. (Einige dieser angepasst ist, von einem blog-post von Laurent Luce). Integer-Objekte dargestellt, die als Blöcke von Speicher mit der folgenden Struktur:
PyObject_HEAD
ist eine makro-Definition der storage für die wurde und die Objekt-Typ. Es ist beschrieben, in einigen Details von der Dokumentationund den code kann man in diese Antwort.Der Arbeitsspeicher ist in großen Blöcken, so dass es nicht eine Zuordnung Engpass für jedes neue ganze Zahl. Die Struktur der block sieht wie folgt aus:
Alle diese sind zunächst leer. Dann, jedes mal, wenn eine neue integer erstellt wird, die Python verwendet die Speicher-wies auf die von
next
und Schrittennext
auf den nächsten freien integer-Objekt in den block.Ich bin mir nicht ganz sicher, wie sich diese änderungen, sobald Sie überschreiten die Speicherkapazität einer normalen integer -, aber sobald Sie dies tun, wird die Größe eines
int
wird größer. Auf meinem Rechner in Python 2:In Python 3, ich glaube das Allgemeine Bild ist das gleiche, aber die Größe von Ganzzahlen, die erhöht in einem mehr fragmentarisch:
Diese Ergebnisse sind natürlich abhängig von der verwendeten hardware! YMMV.
Die Variabilität in integer-Größe in Python 3 ist ein Hinweis, dass Sie möglicherweise mehr Verhalten wie Typen variabler Länge (wie Listen). Und in der Tat stellt sich heraus, um wahr zu sein. Hier ist die definition der C
struct
fürint
Objekte in Python 3:Den Kommentare begleiten, dass diese definition zusammenfassen Python 3 die Darstellung von ganzen zahlen. Null repräsentiert wird, nicht durch einen gespeicherten Wert, sondern durch ein Objekt mit der Größe null (das ist, warum
sys.getsizeof(0)
ist24
bytes, währendsys.getsizeof(1)
ist28
). Negative zahlen werden durch Objekte repräsentiert, die mit einer negativen Größe-Attribut! So eigenartig.InformationsquelleAutor der Antwort senderle