2017-01-11 5 views
-3

私はちょうどPythonを勉強し始め、id()組み込みメソッドを見つけました。 id( "sudgfkasdfgalds9834710931934019734216834jefhdkdj")でも値を返すことがわかりました。なぜPythonのid()もリテラルの値を返します

私の理解では、PythonのチュートリアルやWhat does id() function used for?からも分かるように、id()はメモリアドレスを返します。だから、メモリアドレスは、変数に割り当てられていない任意の値に対して返されます。

+0

リテラルには、それらが格納されているメモリアドレスがあるためです。 – DeepSpace

答えて

0

これは、呼び出した引数の実際のidを返します。つまり、id('c')に電話すると、呼び出すたびに異なる値が返されます。

0

Pythonの性質はCのような言語とは異なります。変数は多かれ少なかれメモリの場所です。

Pythonでは、変数の割り当ては、オブジェクトにラベルを割り当てることが考えられます。ラベルを参照していないオブジェクトは、最終的にガベージコレクタによって再利用されます。複数のラベルが同じオブジェクトを指すことができます。以下で

ルック:

In [1]: a = 1 

In [2]: b = 1 

In [3]: id(a), id(b) 
Out[3]: (34377130320, 34377130320) 

両方ab同じオブジェクトを参照。

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バイトです。

関連する問題