2016-05-22 8 views
-3

私はPythonで課題を勉強しようとしていますが、これで混乱しました。インターンのpython値

>>> a=343434;b=343434 
>>> a is b 
True 
>>> a=343434 
>>> b=343434 
>>> a is b 
False 
+2

最初のものは本当ですか?私はあなたが、それをGoogleで検索して、このリンクを得たと私は同じ結果を得たの両方 – elelias

+0

に虚偽取得:私が得たhttp://stackoverflow.com/questions/2988017/string-comparison-in-python-is-vs – Tico

+2

@elelias Python 2.7とPython 3.5では異なる結果が得られます。 –

答えて

6

Pythonインタプリタはスマートです。最初の行では、両方のabと同時にに割り当ての定義を見ることができるので、それは考えている ':「男は、私は彼らがメモリを節約するために、同じ場所を指すことができます」と、そうします。それはあなたのコードあなたのコードを最適化することができます。第2のケースで

は、それが定義を見ているとすぐにメモリを割り当てます。それは「考える」:「ねえ、私はここに定義があります!私はいくつかの記憶を割り振りましょう!」とそうです。ここではにはのコードを最適化してメモリ使用量を最適化することはできません。

これは、これらのオブジェクトが同じでない理由です。


これは「ライブモード」でのみ機能します(インタープリタにコマンドを挿入してすぐに処理する場合)。あなたがファイルに

a=343434 
b=343434 
print a is b 

を入れて(たとえば、test.py)をしてからpython test.pyを実行した場合、それは(少なくともPythonの2.7.10で)出力True、最初の場合のように、それは全体を見ることができます、ので、一度にコードを作成し、いくつかの最適化を実行します。

+7

答えはソースも証拠もなく、経験だけです。ソースを提供してください。 – Igor

+0

@Igor、あなたはどんなタイプのソースを望みますか?ちょうどそれを実行し、結果を得るでしょう。 – ForceBru

関連する問題