Python 3에서 sys.maxint는 무엇입니까?


162

최대 정수를 나타내는 방법을 찾으려고 노력했으며을 사용하여 읽었습니다 "sys.maxint". 그러나 파이썬 3에서는 호출 할 때 다음을 얻습니다.

AttributeError: module 'object' has no attribute 'maxint'

답변:


172

더 이상 정수 값에 대한 제한이 없으므로 sys.maxint 상수가 제거되었습니다. 그러나 sys.maxsize는 실제 목록 또는 문자열 인덱스보다 큰 정수로 사용할 수 있습니다. 구현의 "자연적인"정수 크기를 따르며 일반적으로 동일한 빌드 옵션에서 동일한 플랫폼의 이전 릴리스에서 sys.maxint와 동일합니다.

http://docs.python.org/3.1/whatsnew/3.0.html#integers


79

다른 사람들이 지적했듯이, Python 3 int은 최대 크기를 갖지 않지만 다른 int값 보다 높은 것이 보장되어야 하는 경우 Infinity에 float 값을 사용할 수 있습니다 float("inf").


또한 레거시 파이썬 (2.7)에서도 작동합니다. 이것은 가능한 모든 실제 값보다 높은 숫자를 반환해야 할 때 정답입니다 (예 : 객체를 비교하여 목록 정렬을 위해)
Aaron D

3
이 방법의 한 가지 단점은 numba 또는 Cython 또는 이와 유사한 방법으로 jit 컴파일을 적용하려는 경우 float inf가 배열의 데이터 유형을 망칠 수 있다는 것입니다. 예를 들어, jit 컴파일러가 자동으로 적절한 c 유형으로 변환 할 수 있도록 모든 정수 유형의 Python 목록이 필요할 수 있습니다. 이는 순수 Python 구현보다 훨씬 빠르게 jit 도구를 적용 할 수 있지만 jit 컴파일러가 배치 된 환경에 설치되지 않은 경우 편의, 테스트, 폴백을 위해 순수 Python으로 구현을 작성하려는 클래식 알고리즘에 특히 중요합니다. 등
ely

24

Python 3 정수에는 최대 값이 없습니다.

파이썬과 같은 방식으로 컴파일 할 때 C에서 int의 최대 크기를 결정하는 것이 목적이라면 struct 모듈을 사용하여 다음을 찾을 수 있습니다.

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

Python 3 int 객체의 내부 구현 세부 정보가 궁금한 경우 sys.int_info숫자 당 비트 수 및 크기 크기 정보를 확인하십시오. 정상적인 프로그램은 이것에 신경 쓰지 않아야합니다.


18

다른 모든 것보다 큰 숫자를 찾는 경우 :

방법 1 :

float('inf')

방법 2 :

import sys
max = sys.maxsize

다른 모든 것보다 작은 숫자를 찾는 경우 :

방법 1 :

float('-inf')

방법 2 :

import sys
min = -sys.maxsize - 1

방법 1은 Python2와 Python3 모두에서 작동합니다. 방법 2는 Python3에서 작동합니다. Python2에서 방법 2를 시도하지 않았습니다.


3

Python 3의 정수 길이는 임의의 길이이므로 Python 3.0에는 더 이상 sys.maxint가 없습니다. sys.maxint 대신 sys.maxsize가 있습니다. 양의 size_t 또는 Py_ssize_t의 최대 크기


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.