2016-05-17 5 views
0

私はPyCharm 2016.1.3 Community Editionを使用しています。Pycharm Python console - コードがブロックとしてコンソールにコピーされたときに、異なる変数が同じオブジェクトであるように見えました。

以下のコードは、ブロック、変数「A」としてPythonコンソールにコピーされ、「b」は同じオブジェクト

>>> a = 1000 
b = 1000 
print (a is b) 
True 

>>> id(a) 
36079236 
>>> id(b) 
36079236 

であるが、線によってコード行を入力するとき、この場合には、両方の変数であります異なるオブジェクト

>>> a = 1000 
>>> b = 1000 
>>> print (a is b) 
False 

最初のケースでは、PyCharmはここで何らかの最適化を行っていますか?ヘルプ

答えて

1

ため

おかげいいえ、あなたはファイルにそのブロックを貼り付けるとpython thefile.pyを実行する場合は、Trueが表示されますが、無地のPythonコンソールで、あなたは自分自身で各行を実行しているからFalseを取得します。私の推測では、コードブロックを一度にコンパイルすると、共通の定数が同じオブジェクトにマッピングされます。これは起こりませんが、インタラクティブなインタプリタがラインを別々に受け取るときです。

これはバグではありません。これはinterningと呼ばれ、Pythonは小さな整数で置き換えます(1000を5に置き換えると、どちらの場合もTrueになります)。文字列リテラルも同様です。 Javaのような他の言語も同じです。

関連する問題