「==」と「is」には違いがありますか? 質問する

「==」と「is」には違いがありますか? 質問する

私のGoogle-fu私を失望させた。

Python では、次の 2 つの等価性テストは同等ですか?

n = 5
# Test one.
if n == 5:
    print 'Yay!'

# Test two.
if n is 5:
    print 'Yay!'

これは、インスタンスを比較するオブジェクトにも当てはまりますかlist?

さて、これで私の質問に対する答えがわかりました:

L = []
L.append(1)
if L == [1]:
    print 'Yay!'
# Holds true, but...

if L is [1]:
    print 'Yay!'
# Doesn't.

つまり、同じオブジェクトであるかどうかを確認するためにテスト==の値をテストするということですか?is

ベストアンサー1

isTrue2 つの変数がメモリ内の同じオブジェクトを指している場合、==変数によって参照されるオブジェクトが等しい場合は、を返します。

>>> a = [1, 2, 3]
>>> b = a
>>> b is a 
True
>>> b == a
True

# Make a new copy of list `a` via the slice operator, 
# and assign it to variable `b`
>>> b = a[:] 
>>> b is a
False
>>> b == a
True

あなたの場合、2 番目のテストは、Python が小さな整数オブジェクトをキャッシュするため、実装の詳細であるためにのみ機能します。より大きな整数の場合、これは機能しません。

>>> 1000 is 10**3
False
>>> 1000 == 10**3
True

文字列リテラルについても同様です。

>>> "a" is "a"
True
>>> "aa" is "a" * 2
True
>>> x = "a"
>>> "aa" is x * 2
False
>>> "aa" is intern(x*2)
True

参照してくださいこの質問同じように。

おすすめ記事