当前位置: 首页 > 面试题库 >

“ ==”和“是”之间有区别吗?

袁弘化
2023-03-14
问题内容

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


问题答案:

isTrue如果两个变量指向同一个对象==如果变量引用的对象相等),则将返回。

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


 类似资料:
  • 问题内容: 有时我看到: 有时我看到: 两种形式之间有区别吗?是否有令人信服的理由使用一种形式而不是另一种形式? 问题答案: 这两种形式没有实际的区别,但是从_语法的_角度来看,两者之间的区别是第一个示例a中将包含分组运算符(括号),其中包括: 在第二个示例中,我们首先拥有一个整数,其中包含:

  • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型

  • 问题内容: Swift提供了关键字(和)检查对象是否可以成功向下转换: 而且还提供了原文: 对于符合的类,这真的有很大不同吗? 问题答案: 是的, 这是有区别的:在Swift中可以与任何类一起使用,而只能与属于或实现的那些类一起使用。

  • 问题内容: 和PHP 之间有区别吗? 问题答案: 的运算符比较值,而操作者以及比较型。 这意味着:

  • 问题内容: 我错放了太多次了,我想我一直忘记,因为我不知道两者之间的区别,只是一个给了我我期望的价值,而另一个却没有。 为什么是这样? 问题答案: 是的简写形式(尽管请注意,该表达式只会被计算一次。) 是的,即指定一元的到。 例子:

  • 问题内容: 因此,我有一段简单的代码可以打印出整数1-10: 然后,如果仅在第3行上更改一个运算符,它将打印出无限数量的1整数(我知道为什么会这样做)。为什么在运行第二个程序时没有出现语法错误?如果赋值运算符后面跟着一个加法运算符,它不会调用语法错误吗? 问题答案: 与相同, 只是意味着。