Weiß jemand, wie Python intern int und long-Typen verwaltet?
- Wählt es dynamisch den richtigen Typ?
- Was ist die Grenze für ein int?
- Ich verwende Python 2.6. Ist es anders als in früheren Versionen?
Wie soll ich den folgenden Code verstehen?
>>> print type(65535)
<type 'int'>
>>> print type(65536*65536)
<type 'long'>
Aktualisieren:
>>> print type(0x7fffffff)
<type 'int'>
>>> print type(0x80000000)
<type 'long'>
realloc
muss, ist alles in Ordnung. Aber ich bin mir nicht ganz sicher, also überlasse ich die Antwort jemand anderem.var = 666L
int
ist ein Clong
(Standard ist signiert) ... siehe<CPython 2.X source>/Include/intobject.h
: typedef struct {PyObject_HEAD long ob_ival; } PyIntObject; In jedem Fallint
erlaubt Python 2.x negative Zahlen; ein Cunsigned
würde einfach nicht fertig werden.Antworten:
int
undlong
wurden vor ein paar Versionen "vereinheitlicht" . Zuvor war es möglich, ein Int durch Math Ops zu überlaufen.3.x hat dies weiter vorangetrieben, indem es long insgesamt eliminiert und nur int hat.
sys.maxint
Enthält den Maximalwert, den ein Python-Int enthalten kann.sys.getsizeof()
.sys.maxsize
Enthält die maximale Größe in Bytes, die ein Python-Int haben kann.sys.maxsize
.quelle
int
Python 2long
).Dieser PEP sollte helfen.
Fazit ist, dass Sie sich in Python-Versionen> 2.4 wirklich keine Sorgen machen müssen
quelle
Auf meiner Maschine:
Python verwendet Ints (32-Bit-Ganzzahlen mit Vorzeichen, ich weiß nicht, ob es sich um C-Ints unter der Haube handelt oder nicht) für Werte, die in 32-Bit passen, wechselt jedoch automatisch für alles zu Longs (beliebig große Anzahl von Bits - dh Bignums) größer. Ich vermute, dass dies die Dinge für kleinere Werte beschleunigt und gleichzeitig Überläufe mit einem nahtlosen Übergang zu Bignums vermeidet.
quelle
Interessant. Auf meiner 64-Bit-Box (i7 Ubuntu):
Vermutlich werden auf einem größeren Computer bis zu 64-Bit-Ints angezeigt.
quelle
Python 2.7.9 fördert automatisch Zahlen. Für einen Fall, in dem man sich nicht sicher ist, int () oder long () zu verwenden.
quelle
Python 2 legt den Typ automatisch basierend auf der Größe des Werts fest. Eine Anleitung mit Maximalwerten finden Sie unten.
Der Maximalwert des Standard-Int in Python 2 ist 65535, alles, was darüber liegt, ist lang
Beispielsweise:
In Python 3 wurde der lange Datentyp entfernt und alle ganzzahligen Werte werden von der Int-Klasse behandelt. Die Standardgröße von Int hängt von Ihrer CPU-Architektur ab.
Beispielsweise:
Die Min / Max-Werte der einzelnen Typen finden Sie unten:
Wenn die Größe Ihres Int die oben genannten Grenzwerte überschreitet, ändert Python automatisch seinen Typ und weist mehr Speicher zu, um diese Erhöhung der Min / Max-Werte zu bewältigen. Wo es in Python 2 in 'long' konvertiert wird, wird es jetzt nur noch in die nächste Größe von Int konvertiert.
Beispiel: Wenn Sie ein 32-Bit-Betriebssystem verwenden, beträgt Ihr Maximalwert für ein Int standardmäßig 2147483647. Wenn ein Wert von 2147483648 oder höher zugewiesen wird, wird der Typ in Int64 geändert.
Es gibt verschiedene Möglichkeiten, die Größe des int und seine Speicherzuordnung zu überprüfen. Hinweis: In Python 3 gibt die Verwendung der integrierten type () -Methode immer zurück,
<class 'int'>
unabhängig von der Größe, die Sie verwenden.quelle
Ab Python 3.x sind die einheitlichen Integer-Bibliotheken noch intelligenter als ältere Versionen. Auf meiner (i7 Ubuntu) Box habe ich folgendes:
Einzelheiten zur Implementierung finden Sie in den
Include/longintrepr.h, Objects/longobject.c and Modules/mathmodule.c
Dateien. Die letzte Datei ist ein dynamisches Modul (kompiliert zu einer solchen Datei). Der Code ist gut kommentiert, um zu folgen.quelle
Nur um mit allen Antworten fortzufahren, die hier gegeben wurden, insbesondere @James Lanes
Die Größe des Integer-Typs kann durch folgende Formel ausgedrückt werden:
Gesamtbereich = (2 ^ Bit-System)
untere Grenze = - (2 ^ Bit-System) * 0,5 obere Grenze = ((2 ^ Bit-System) * 0,5) - 1
quelle
Es verwaltet sie, weil
int
undlong
Geschwister Klassendefinitionen sind. Sie haben geeignete Methoden für +, -, *, / usw., die Ergebnisse der entsprechenden Klasse liefern.Beispielsweise
In diesem Fall verfügt die Klasse
int
über eine__mul__
Methode (die * implementiert), dielong
bei Bedarf ein Ergebnis erstellt .quelle