Pythonの性質はCのような言語とは異なります。変数は多かれ少なかれメモリの場所です。
Pythonでは、変数の割り当ては、オブジェクトにラベルを割り当てることが考えられます。ラベルを参照していないオブジェクトは、最終的にガベージコレクタによって再利用されます。複数のラベルが同じオブジェクトを指すことができます。以下で
ルック:
In [1]: a = 1
In [2]: b = 1
In [3]: id(a), id(b)
Out[3]: (34377130320, 34377130320)
両方a
とb
同じオブジェクトを参照。
Pythonでは、いくつかのタイプのオブジェクト(数字や文字列など)がは不変であることに注意してください。インスタンスを変更することはできません。参照:
In [4]: a += 1
In [5]: id(a)
Out[5]: 34377130352
後異なるオブジェクトに、a
ポイントをincementing。
CPythonが起動すると、頻繁に使用される小さな整数(0〜100など)のオブジェクトが作成されます。これらのオブジェクトは、通常、整数に関連付けるものよりもはるかに大きくなります。また、メモリアドレスをid
として使用することは、CPython実装の詳細です。 CPythonの中に我々が行うことができるように:
In [6]: id(2) - id(1)
Out[6]: 32
In [7]: (id(100) - id(0))/32
Out[7]: 100.0
をしたがって、この場合(64ビットのFreeBSD OS、CPythonの3.6)の整数オブジェクトは32バイトです。
リテラルには、それらが格納されているメモリアドレスがあるためです。 – DeepSpace