sys.maxsize
n'est pas en fait la valeur entière maximale prise en charge. Vous pouvez doubler maxsize et le multiplier par lui-même et il reste une valeur valide et correcte.
Cependant, si vous essayez sys.maxsize ** sys.maxsize
, cela bloquera votre machine pendant un certain temps. Comme beaucoup l'ont souligné, la taille en octets et en bits ne semble pas être pertinente car elle n'existe pratiquement pas. Je suppose que Python étend simplement joyeusement ses entiers lorsqu'il a besoin de plus d'espace mémoire. En général, il n'y a pas de limite.
Maintenant, si vous parlez d'emballer ou de stocker des entiers de manière sûre où ils peuvent être récupérés ultérieurement avec intégrité, alors bien sûr c'est pertinent. Je ne suis vraiment pas sûr de l'emballage, mais je sais que le module pickle
de Python gère bien ces choses. Les représentations sous forme de chaînes n'ont évidemment aucune limite pratique.
Donc, en réalité, le fond du problème est le suivant : quelle est la limite de vos applications ? De quoi avez-vous besoin en termes de données numériques ? Utilisez cette limite plutôt que la limite d'entiers assez inexistante de Python.
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).