224

I've been trying to find out how to represent a maximum integer, and I've read to use "sys.maxint". However, in Python 3 when I call it I get:

AttributeError: module 'object' has no attribute 'maxint'
Mazdak
  • 105,000
  • 18
  • 159
  • 188
Ci3
  • 4,632
  • 10
  • 34
  • 44
  • 1
    Possible duplicate of [Maximum and Minimum values for ints](https://stackoverflow.com/questions/7604966/maximum-and-minimum-values-for-ints) – Georgy Sep 27 '19 at 09:07

6 Answers6

238

The sys.maxint constant was removed, since there is no longer a limit to the value of integers. However, sys.maxsize can be used as an integer larger than any practical list or string index. It conforms to the implementation’s “natural” integer size and is typically the same as sys.maxint in previous releases on the same platform (assuming the same build options).

https://docs.python.org/3/whatsnew/3.0.html#integers

wjandrea
  • 28,235
  • 9
  • 60
  • 81
Diego Basch
  • 12,764
  • 2
  • 29
  • 24
  • 11
    That's all nice and good, until you need a timedelta(days=x) and x is larger than 2^32: then you get OverflowError: Python int too large to convert to C int. – marcotama Feb 24 '21 at 11:48
  • @marcotama `datetime.timedelta` can only go up to `days=999_999_999` anyway. You should probably use a different library. – wjandrea Feb 04 '23 at 18:59
104

As pointed out by others, Python 3's int does not have a maximum size, but if you just need something that's guaranteed to be higher than any other int value, then you can use the float value for Infinity, which you can get with float("inf").

In Python 3.5 onwards, you can use math.inf.

Note: as per ely's comment, this may impact the efficiency of your code, so it may not be the best solution.

mwfearnley
  • 3,303
  • 2
  • 34
  • 35
  • Also works with legacy Python (2.7) - this is the correct answer when you need to return a number higher than all possible real values (e.g. for list sorting by comparing objects) – Aaron D Aug 02 '17 at 11:56
  • 15
    One downside of this approach is that float inf can ruin the data type of arrays if you are trying to apply jit compilation with numba or Cython or similar. You may need a Python list of all integer types so that a jit compiler can automatically convert it to the appropriate c type, for example. This is especially critical for classical algorithms where you might apply jit tools to make them much faster than a pure Python implementation, but still want to write the implementation in pure Python for convenience, testing, fallback if jit compiler is not installed in a deployed environment, etc. – ely Mar 03 '19 at 23:18
44

If you are looking for a number that is bigger than all others:

Method 1:

float('inf')

Method 2:

import sys
max = sys.maxsize

If you are looking for a number that is smaller than all others:

Method 1:

float('-inf')

Method 2:

import sys
min = -sys.maxsize - 1

Method 1 works in both Python2 and Python3. Method 2 works in Python3. I have not tried Method 2 in Python2.

chash
  • 3,975
  • 13
  • 29
Vikrant
  • 1,149
  • 12
  • 19
31

Python 3 ints do not have a maximum.

If your purpose is to determine the maximum size of an int in C when compiled the same way Python was, you can use the struct module to find out:

>>> import struct
>>> platform_c_maxint = 2 ** (struct.Struct('i').size * 8 - 1) - 1

If you are curious about the internal implementation details of Python 3 int objects, Look at sys.int_info for bits per digit and digit size details. No normal program should care about these.

gps
  • 1,360
  • 12
  • 12
5

Python 3.0 doesn't have sys.maxint any more since Python 3's ints are of arbitrary length. Instead of sys.maxint it has sys.maxsize; the maximum size of a positive sized size_t aka Py_ssize_t.

Cookiesfly
  • 51
  • 1
  • 1
1

An alternative is

import math

... math.inf ...
wstomv
  • 761
  • 1
  • 6
  • 13