小编典典

“==”和“is”有区别吗?

all

我的Google-fu让我失望了。

在 Python 中,以下两个相等性测试是否等效?

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测试以查看它们是否是同一个对象?


阅读 110

收藏
2022-03-04

共1个答案

小编典典

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
2022-03-04