ไม่เหมือน C/C++ ที่มี LONG_MAX Python 3 มี Integer แบบ Unlimited Precision (Arbitrary Precision) ไม่มีขีดจำกัดที่กำหนดไว้ชัดเจน ขีดจำกัดปฏิบัติคือ Available Memory (Address Space)
Python 2 vs Python 3
Python 2 (Legacy)
มี int (C Long, จำกัด) และ long (Arbitrary Precision) แยกกัน
>>> import sys >>> sys.maxint 2147483647 # 2^31 - 1 (32-bit) หรือ 9223372036854775807 (64-bit) >>> type(sys.maxint) <type 'int'> >>> type(sys.maxint + 1) <type 'long'> # Auto-promote เป็น long
Python 3 (Current)
int และ long รวมกันเป็น int แบบ Arbitrary Precision sys.maxint ถูกลบ ใช้ sys.maxsize แทน (Max Size ของ Container เช่น List, String)
>>> import sys >>> sys.maxsize 9223372036854775807 # 2^63 - 1 (64-bit Platform) >>> type(sys.maxsize) <class 'int'> >>> type(sys.maxsize + 1) <class 'int'> # ยังคงเป็น int ไม่เปลี่ยน Type
ทดสอบ Integer ขนาดใหญ่ใน Python 3
# Python 3 จัดการ Big Integer ได้โดยอัตโนมัติ
huge = 10 ** 10000 # 1 ตามด้วย 10,000 ศูนย์
print(len(str(huge))) # 10001
factorial_100 = 1
for i in range(1, 101):
factorial_100 *= i
print(factorial_100) # 9332621... (158 digits)
sys.int_info (Python 3)
>>> import sys >>> sys.int_info sys.int_info(bits_per_digit=30, sizeof_digit=4) # ภายใน Python ใช้ Base 2^30 = 1,073,741,824 ต่อ Digit
Float Limits (IEEE 754 Double Precision)
Integer ไม่มี Limit แต่ Float มี:
>>> sys.float_info
sys.float_info(
max=1.7976931348623157e+308, # ~2^1024
max_exp=1024,
max_10_exp=308,
min=2.2250738585072014e-308, # ~2^-1022
min_exp=-1021,
min_10_exp=-307,
dig=15, # Decimal Precision
mant_dig=53, # Binary Precision (53 bits)
epsilon=2.220446049250313e-16, # Machine Epsilon
radix=2,
rounds=1
)
สรุป
| Version | Integer Limit | Note |
|---|---|---|
| Python 2 | sys.maxint (Platform-dependent) | Auto-promote to long |
| Python 3 | No Limit (Memory Only) | int = Arbitrary Precision |
| Both | sys.maxsize | Max Container Size, Not Integer Value |
Bottom Line: ใน Python 3 คุณสามารถใช้ Integer ใหญ่เท่าไหร่ก็ได้ ตราบใดที่ RAM พอ