我的Google-fu让我失望了。
在 Python 中,以下两个相等性测试是否等效?
n = 5 # Test one. if n == 5: print 'Yay!' # Test two. if n is 5: print 'Yay!'
这是否适用于您将要比较实例的对象(list比如说)?
list
好的,所以这种回答我的问题:
L = [] L.append(1) if L == [1]: print 'Yay!' # Holds true, but... if L is [1]: print 'Yay!' # Doesn't.
那么==测试值在哪里is测试以查看它们是否是同一个对象?
==
is
is``True如果两个变量指向同一个对象(在内存中),==如果两个变量引用的对象相等,则返回。
is``True
>>> 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
在您的情况下,第二个测试仅有效,因为 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