C/C++와 달리 파이썬 3의 long 타입은 무제한 정밀도(unlimited precision)를 가지며, 명시적으로 정의된 상한값이 없습니다. 실질적인 한계는 시스템에서 사용 가능한 메모리 주소 공간의 크기라고 볼 수 있습니다.
반면 파이썬 2에서는 정수(int)가 자신의 한계값을 초과하면 자동으로 long 타입으로 전환됩니다.
파이썬 2에서의 동작
>>> import sys >>> type(sys.maxint) <type 'int'> >>> type(sys.maxint + 1) <type 'long'>
위 예제를 보면 sys.maxint는 int 타입이지만, 여기에 1을 더하는 순간 자동으로 long 타입으로 바뀌는 것을 확인할 수 있습니다.
파이썬 3에서의 변화
파이썬 3에서는 sys.maxint가 제거되었으며, 대신 sys.maxsize를 사용할 수 있습니다.
>>> import sys >>> type(sys.maxsize) <class 'int'> >>> type(sys.maxsize + 1) <class 'int'>
출력 결과에서 알 수 있듯이, 파이썬 3에서는 int와 long이 하나로 통합되었기 때문에 값이 한계를 넘어도 여전히 int 타입으로 유지됩니다. 즉, 정수 크기 제한은 더 이상 문제가 되지 않습니다.
파이썬 2.7에서 최대·최소 정수값 확인하기
>>> import sys >>> print sys.maxint # 최대 정수값 2147483647 >>> print -sys.maxint - 1 # 최소 정수값 -2147483648
파이썬 2.7에서는 최대 정수값이 2,147,483,647(2³¹ − 1)이며, 최소 정수값은 −2,147,483,648(−2³¹)입니다.
파이썬 3.6에서의 최대 정수값
파이썬 3에서는 이보다 훨씬 큰 값을 자유롭게 다룰 수 있습니다. 기존의 sys.maxint는 sys.maxsize로 대체되었습니다.
>>> import sys >>> print(sys.maxsize) 9223372036854775807
sys.maxsize는 플랫폼에 따라 다르게 나타날 수 있으며, 64비트 시스템에서는 일반적으로 9,223,372,036,854,775,807(2⁶³ − 1)을 반환합니다. 참고로 이 값은 정수의 상한이라기보다 리스트나 문자열 등 컨테이너가 가질 수 있는 최대 크기를 나타내는 값입니다.
정수·long·실수(float)의 최대 및 최솟값 조회하기
파이썬 2.7 예제
import sys
print("Float value information: ", sys.float_info)
print("\n")
print("Long Integer value information: ", sys.long_info)
print("\n")
print("Maximum size of an integer: ", sys.maxsize)실행 결과
('Float value information: ', sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308,
min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15,
mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1))
('Long Integer value information: ', sys.long_info(bits_per_digit=30, sizeof_digit=4))
('Maximum size of an integer: ', 9223372036854775807L)파이썬 3.6 예제
import sys
print("Float value information: ", sys.float_info)
print("\nInteger value information: ", sys.int_info)
print("\nMaximum size of an integer: ", sys.maxsize)실행 결과
Float value information: sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1) Integer value information: sys.int_info(bits_per_digit=15, sizeof_digit=2) Maximum size of an integer: 2147483647
정리
- 파이썬 2: int는 한계(약 21억)를 넘으면 자동으로 long으로 전환되며,
sys.maxint로 최댓값을 확인할 수 있습니다. - 파이썬 3: int와 long이 통합되어 정수에 사실상 크기 제한이 없습니다.
sys.maxint는 삭제되고sys.maxsize로 대체되었습니다. - 실수(float):
sys.float_info를 통해 최대 약 1.79×10³⁰⁸까지 표현할 수 있음을 확인할 수 있습니다.