Comme le soulignent d'autres réponses, contrairement à float
(qui a une valeur maximale de sys.float_info.max
), le type int
est illimité en Python ; il est vraiment limité par la limite de mémoire de votre machine. Cela dit, il y a certaines limites liées aux entiers.
Par exemple, depuis Python 3.10.7, la conversion de str
en int
ou l'affichage de int
est limitée à 4300 chiffres, ce qui a pour conséquence que l'écriture d'un entier très long dans un fichier est limitée par défaut (ce qui peut être désactivé en exécutant sys.set_int_max_str_digits(0)
). Vous pouvez obtenir des informations sur la représentation interne des entiers en Python en utilisant sys.int_info
.
Aussi, étant donné que float
est limité, vous ne pouvez pas effectuer de calculs où le résultat deviendrait un flottant qui est en dehors de la limite des flottants (par exemple, 2**1025/2
déclenche une OverflowError
).
De plus, les int
dans des bibliothèques populaires d'analyse de données telles que numpy et pandas, etc. sont limités par leur type, par exemple numpy.uint64
peut contenir le plus grand entier positif dans numpy, ce qui peut être vérifié avec np.iinfo('uint64')
. Cela signifie que nous ne pouvons pas effectuer de calculs vectorisés impliquant des entiers trop grands, par exemple, nous ne pouvons pas prendre le log2 de 2**64 (en fait, np.log2(2**64)
déclenche une TypeError).
sys.maxsize
est la taille de la liste la plus grande possible. Vous pouvez vérifier cela en utilisant range()
.
len(range(sys.maxsize)) == sys.maxsize # 9223372036854775807
len(range(sys.maxsize+1)) # OverflowError
21 votes
Notez que en Python 3, le type
int
est essentiellement le même que le typelong
en Python 2, donc l'idée d'un maximum ou d'un minimumint
disparaît complètement. C'est fondamentalement sans importance même sur Python 2.23 votes
@agf : cela peut être pertinent de différentes manières. Par exemple dans n'importe quel algorithme qui nécessite de sauvegarder la valeur minimale trouvée (comme un algorithme de tri). La valeur minimale pourrait être initialisée à sys.maxint, ce qui garantit que n'importe quelle première valeur trouvée est prise comme minimum
2 votes
@Toaster sauf que vous pouvez avoir une liste où toutes les valeurs sont supérieures à
sys.maxint
car c'est seulement le maximum pour le typeint
sur Python 2, que Python promouvra silencieusement enlong
.57 votes
Si vous avez besoin d'utiliser "une valeur très grande" dans un algorithme, par exemple trouver le minimum ou le maximum d'une collection générique,
float('inf')
oufloat('-inf')
peuvent être très utiles.1 votes
Possible duplicate of Plages d'entiers en Python
0 votes
@geoff vrai, mais un inconvénient pour le code moderne est que les flottants ne peuvent pas être utilisés comme
Literal
dans les indications de type. Donc, vous ne pouvez pas dire qu'une liste peut contenirUnion[int, Literal[-inf]]
même si c'est peut-être exactement ce qui est nécessaire pour une application donnée :/0 votes
Il vaut peut-être la peine de lire : [SO] : Valeur maximale et minimale des entiers de types C depuis Python (réponse de @CristiFati).