1. ホーム
  2. python

[解決済み] と "is "は違うのですか?

2022-03-16 09:58:10

質問

私の グーグル-フー は失敗しました。

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 は、同じオブジェクトかどうかをテストするのですか?

どのように解決するのですか?

is を返します。 True 2つの変数が(メモリ上の)同じオブジェクトを指している場合。 == の場合、その変数が参照するオブジェクトが等しいとします。

>>> 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

ご覧ください この質問 をご覧ください。