Python 3: Integer không giới hạn (unlimited precision). Giới hạn thực tế là bộ nhớ khả dụng (available memory).
Python 2 vs Python 3
| Đặc điểm | Python 2 | Python 3 |
|---|---|---|
| Kiểu int | Cố định (thường 32-bit signed: -2³¹ đến 2³¹-1) | Unlimited precision (merged với long) |
| Kiểu long | Unlimited precision (tự động convert) | Không còn (gộp vào int) |
| sys.maxint | Có (2³¹-1 = 2147483647) | Đã xóa |
| sys.maxsize | Có (Py_ssize_t max) | Có (thường 2⁶³-1 trên 64-bit) |
Python 2 Demo
import sys print(type(sys.maxint)) #print(type(sys.maxint + 1)) # (auto convert) print(sys.maxint) # 2147483647 print(-sys.maxint - 1) # -2147483648
Python 3 Demo
import sys print(type(sys.maxsize)) #print(type(sys.maxsize + 1)) # (vẫn int!) print(sys.maxsize) # 9223372036854775807 (2⁶³-1 trên 64-bit) # Nhưng có thể gán lớn hơn: x = 10**1000 print(type(x)) # print(len(str(x))) # 1001 digits
sys.maxsize là gì?
- Giá trị tối đa của
Py_ssize_t(kích thước container: list, dict, string...). - Trên 64-bit:
2**63 - 1 = 9223372036854775807. - Trên 32-bit:
2**31 - 1 = 2147483647. - Không phải giới hạn giá trị integer.
Float & Integer Info
import sys # Float info (IEEE 754 double precision) print(sys.float_info) # sys.float_info(max=1.79e+308, min=2.22e-308, dig=15, ...) # Integer info (Python 3) print(sys.int_info) # sys.int_info(bits_per_digit=30, sizeof_digit=4) # 30-bit digits internally
Tóm lại
- Python 3: int = unlimited precision. Chỉ giới hạn bởi RAM.
- Python 2:
intcó giới hạn, tự động chuyển sanglong. sys.maxsizedùng cho container size, không phải int max value.- Float: IEEE 754 double (~1.8e308 max, ~15-17 digits precision).