2017-06-05 7 views
2

私は既にthisの質問を見ましたが、id()の呼び出しが同じ値を返す理由は実際には得られませんが、isの比較ではFalseが返されます。IDが同じでも、なぜ `is`がFalseを返しますか?

>>> [2,2,2] + [1] == [2,2,2,1] 
True 
>>> [2,2,2] + [1] is [2,2,2,1] 
False 
>>> id([2,2,2] + [1]) 
4396847688 
>>> id([2,2,2,1]) 
4396847688 

確かに、私はIDが異なっていない理由を私は得ることはありません、彼らがしたように2つの比較はTrueFalseを返すように期待していませんでした。

+4

単に同じメモリがオブジェクトに再利用されているため、最後の2つのステートメントでは、取得しているIDのオブジェクトのライフタイムが重複しないため、Pythonは同じメモリを自由に(再)使用できます。 –

+0

それは感謝します、ありがとう!それが答えだったら、私はそれを受け入れるだろう! – damian

答えて

3

「答え」としてだけで再入力私のコメント:

同じメモリをオブジェクトに再利用されるというだけの理由:最後の二つの文では、IDのオブジェクトの寿命は、あなたにはありません取得しています重複するので、Pythonは自由に(再)それらのために同じメモリを使用します。

関連する問題