Pythonで扱える整数の最大値はいくつ?int型の上限を徹底解説
Pythonで整数を扱う際、「最大でどのくらいの値まで表現できるのか」と疑問に思ったことはありませんか?結論から言うと、Python 3では整数(int型)に明示的な上限は存在しません。C/C++のlong型のような固定精度の制約がなく、理論上は無限の精度で整数を扱えます。
ただし、実際にはメモリやアドレス空間の大きさが事実上の上限となります。この記事では、Python 2とPython 3における整数の最大値の扱いの違いについて、具体例とともに詳しく解説します。
Python 2の場合:int型からlong型への自動切り替え
Python 2では、整数がint型の上限(sys.maxint)を超えると、自動的にlong型へと切り替わる仕組みになっていました。以下のコードでその挙動を確認できます。
>>> import sys
>>> type(sys.maxint)
<type 'int'>
>>> type(sys.maxint + 1)
<type 'long'>
このように、sys.maxint(最大整数値)に1を足した時点で、型が「int」から「long」に変化していることが分かります。
Python 2.7での最大値・最小値の確認
Python 2.7では、sys.maxintを使って整数の最大値と最小値を以下のように確認できました。
>>> import sys
>>> print sys.maxint # 整数の最大値
2147483647
>>> print -sys.maxint - 1 # 整数の最小値
-2147483648
32ビット環境では最大値は2147483647(約21億)、最小値は-2147483648となり、これはC言語などで一般的な32ビット符号付き整数の範囲と同じです。
Python 3の場合:sys.maxsizeの登場
Python 3では、sys.maxintは廃止されました。代わりに導入されたのがsys.maxsizeです。これは「int型とlong型が統合された」ことを反映したもので、プラットフォームのポインタサイズ(通常は64ビット環境で9223372036854775807)を表します。
>>> import sys
>>> type(sys.maxsize)
<class 'int'>
>>> type(sys.maxsize + 1)
<class 'int'>
注目すべきは、sys.maxsizeに1を加えても型が変わらない点です。Python 3ではint型とlong型が統合され、どれだけ大きな値でもすべてint型として扱われるためです。
#Python 3.6での確認例
>>> import sys
>>> print(sys.maxsize)
2147483647
なお、表示される値は実行環境によって異なります。32ビット版のPythonでは2147483647、64ビット版では9223372036854775807が返されます。
float型・整数型の詳細情報を取得する方法
sysモジュールを使えば、浮動小数点数や整数の内部的な情報も確認できます。
Python 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)Python 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
まとめ
- Python 3のint型には上限がない:メモリが許す限り、任意の大きさの整数を扱えます。
- Python 2では自動的にlong型へ切り替え:sys.maxintを超えるとlong型に移行していました。
- sys.maxsizeの役割:Python 3ではsys.maxintの代わりにsys.maxsizeを使います。これは実際の整数の上限ではなく、リストのインデックスなどの最大値(プラットフォーム依存)を示すものです。
大きな数値計算を行う場合でも、Python 3なら桁あふれを心配せずに済むのは大きなメリットですね。ぜひ活用してください。
-
Pythonの文字列の最大長はどれくらい?sys.maxsizeで確認する上限サイズ
Pythonにおける文字列の最大長Pythonで扱える文字列の最大長は、固定値ではなく実行環境(プラットフォーム)に依存します。具体的には、システムが利用できるアドレス空間や搭載メモリ(RAM)の容量によって上限が決まります。sys.maxsizeで上限を確認する標準ライブラリのsysモジュールに定義されている定数sys.maxsizeを参照すると、その環境での最大サイズを確認できます。64ビットシステムでは 263 − 1(9223372036854775807)が返されます。>>> import sys>>> sys.maxsize92233720368
-
Pythonでfloat型の最大値を取得する方法|sys.float_info.maxの使い方
Pythonでは、sysモジュール内にfloat_infoという構造体シーケンス(名前付き要素を持つタプル)が定義されています。この構造体には、浮動小数点数に関するさまざまな情報が格納されており、その中のmax要素を参照することで、Pythonで表現可能な有限のfloat型の最大値を取得できます。 sys.float_info.maxの使い方 以下のように、sysモジュールをインポートしてsys.float_info.maxにアクセスするだけで、最大値を確認できます。 >>> import sys >>> sys.float_info.max 1.79769