Select Language

AI Technology Community

2.7、Python小整数池

この節では、整数プールに関する問題を紹介します。Pythonでは、整数が表現できる範囲は非常に広いですが、よく使われる整数はおそらく -1000から1000の間に集中しています。たとえば、試験の点数は一般的に0から100の間で、年齢も0から100の間です。

整数オブジェクトの分布が不均一であるという特性に基づいて、いくつかの最適化を行って実行効率を向上させることができます。

Pythonインタープリターの内部実装では、-5から256までの整数に対して小整数プールを作成しています。使用する整数オブジェクトがこの範囲内にある場合、自動的に新しい整数オブジェクトを作成するのではなく、小整数プールに値が同じ整数オブジェクトがあるかどうかを確認します:

  • もしあれば、この既存の整数オブジェクトを返します;

  • もしなければ、新しい整数オブジェクトを作成します。この新しく作成された整数オブジェクトは、後で共有されて使用される可能性もあります。


関数id()を使ってオブジェクトのアドレスを確認することができます。CPythonでは、id()が返すのはあるオブジェクトのメモリ内のアドレス情報です。このid値を比較して、このような共有関係が存在するかどうかを確認することができます。また、isを使って2つのオブジェクトが同じかどうかをチェックすることもできます。

>>> a = 12      # オブジェクトaを作成し、値を12にする
>>> id(a)       # aのid値を確認する
8791344854192
>>> b = 11      # 新しいオブジェクトbを作成し、値を11にする
>>> id(b)       # bのid値を確認する
8791344854160   # bのidとaのidは異なり、異なる整数オブジェクトである
>>> a is b      # isを使ってaとbが同じ整数オブジェクトかどうかを判断する
False           # 確かに同じ整数オブジェクトではない
>>> b = b + 1   # bに再び値を代入する
>>> b           # bの値を確認する
12              # bの値とaの値は同じで、どちらも12である
>>> id(b)       # bの現在のid値を確認する
8791344854192   # bのidが変化し、現在はaと同じになった
>>> a is b      # isを使ってaとbが同じオブジェクトかどうかをチェックする
True            # 確かに同じオブジェクトである


post
  • 26

    item of content
Pythonの基本データ型は全部で26章あります。
この章では、整数型、浮動小数点数、文字列、ブール型、リスト、タプル、セットおよび辞書など、Pythonが提供する基本的なデータ型について紹介します。また、これらのデータ型に対する演算操作についても解説します。
私たちはPythonが強タイプ言語であることを知っています。つまり、各変数の型は特定の時点でのみ確定します。言い換えれば、Pythonにおける任意の生存しているオブジェクトの型は一意です。異なる型のオブジェクトには異なる属性があり、異なる操作を実行できます。
さらに、この章の最後では変数やオブジェクトなどの概念についても触れられます。それぞれのオブジェクトには確定した型があり、各変数は特定のオブジェクトを指し示します。