0

文字列比較を行う次の python コードがあります。

>>> mf="moo foo"

>>> mf[0:3]
'moo'

>>> mf[0:3] is "moo"
False

>>> mf[0:3] == "moo"
True

>>> str(mf[0:3]) is "moo"
False

したがって、double equals 演算子は true を返しますが、pythonis演算子は false を返します。これは、それらが同じオブジェクトではないためです。

で取得した一連の文字と、同じ文字列のstr[n:m]リテラル表現 ( )の技術的な違いは何ですか? 'moofoo'なぜそれらは同じオブジェクトではないのですか?

4

1 に答える 1

5

is等しいかどうか、および同じオブジェクト ID かどうかをテストします (CPython では、これはメモリ内のオブジェクトのアドレスです)。str(...)スライスすると浅いコピーが作成されるため、isテストは失敗します。

==値が等しいかどうかをテストします。isオブジェクトの同一性をテストします。

Pythonのメーリングリストから引用

「is」を使用すると、システムが 2 つのものを追跡しているかどうかを区別することができます。

于 2013-07-25T05:14:30.537 に答える