2016-09-22 13 views
1

パフォーマンスを向上させるために、いくつかの数値オブジェクトを保持する記事を読んでいます。たとえば、Pythonビルトイン整数オブジェクト

x = 3 
y = 3 
print(id(x)) 
print(id(y)) 

は同じ値を示します。つまり、xとyはまったく同じオブジェクトを参照しています。この記事では、保持されている番号オブジェクトがおよそ1〜100の範囲内にあることを示唆していました。

for i in range(-1000,1000): 
    x = int(str(i)) 
    y = int(str(i)) 
    if str(id(x)) == str(id(y)): 
     print(i) 

をし、その結果は非常に奇妙です:

は、だから私は、正確な範囲を取得するために、次のコードをテストしたことは-5〜256を出力します。

私はこれらの2つの魔法の数字がどのように由来し、なぜそれらが使われているのだろうと思います。また、これらの2つの値は環境によって異なりますか? ありがとう!

+1

が起こって起こっかそれに依存しませんCPython実装の詳細(最適化)。一般的なPythonではありません。 –

+1

答えは、可変ではないタイプのIDを使わないでください – Julius

答えて

1

256は、2の累乗で、人々がその範囲の数値を使用するのに十分小さい数値です。

-5おそらく、おそらく特別な値としてはわかりません。

関連:またWhat's with the Integer Cache inside Python?

そのスレッドからの知恵の言葉:

これは実装の詳細では、これまでにです

+0

ありがとう!私は間違ったキーワードで検索したと思います。関連記事は私の質問を解決しました! –

関連する問題