知行编程网知行编程网  2022-12-26 13:00 知行编程网 隐藏边栏  0 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python中==和is有什么区别的相关知识,包括is和does的区别用法,以及英语中are和is怎么区别这些编程知识,希望对大家有参考作用。

Python 中 == 和 is 有什么区别

==就是比较两个对象的内容是否相等,即比较两个对象的“值”是否相等,而不管两个对象在内存中的引用地址是否相同。

is比较两个实例对象是否完全一样,是否是同一个对象,占用的内存地址是否相同。也就是说,是比较两个条件:1、内容相同。 2.内存中的地址相同。

a = 10000
b = 10000
print(a == b)  # True
print(a is b)  # True
print(id(a))  # 4461408208
print(id(b))  # 4461408208

a = "hello world"
b = "hello world"
print(a == b)  # True
print(a is b)  # True
print(id(a))  # 4461408208
print(id(b))  # 4461408208

a = [11,22,33]
b = [11,22,33]
print(a == b)  # True
print(a is b)  # False
print(id(a))  # 4409720712
print(id(b))  # 4409720776

在上面的代码中,我们分别定义了两个变量a和b。通过输出结果我们可以发现,当变量为字符串或者数字时,is和==的输出结果是一样的。当它们是列表时,is 和 == 结果是不同的。通过打印两个变量的id值,我们可以看出两个id值是不一样的。这是因为我们在创建列表a和b的时候,已经开辟了两块内存分别存放这两个变量。从表面上看,结果是一样的,只是两个变量指向的内存地址不同。我们将上面的代码改成如下:

1 a = [11,22,33]
2 b = a
3 print(a == b)  # True
4 print(a is b)  # True
5 print(id(a))  # 4535062408
6 print(id(b))  # 4535062408

在上面的代码中,我们并没有直接给变量b赋值,而是让b=a,这样b和a指向的是同一块内存,所以a is b is True。

我在PyCharm编辑器中实现了上面的代码,但是在终端命令行中实现的结果是不一样的,如下:

 1 >>> a = 10000
 2 >>> b = 10000
 3 >>> a == b
 4 True
 5 >>> a is b
 6 False
 7 >>> id(a)
 8 4360555120
 9 >>> id(b)
10 4360555216

当我们将 a 和 b 的值变小时,如下:

>>> a = 100
>>> b = 100
>>> a == b
True
>>> a is b
True
>>> id(a)
4357367984
>>> id(b)
4357367984

上面的原因是python直接在内存中创建小整数的副本,不会回收。所有创建的小整型变量都可以直接从对象池中引用。但请注意,Python 只缓存较小的整数对象(在 [-5, 256] 范围内),而不是所有整数对象。也就是说,只有在这个[-5,256]范围内创建的变量值跟is比较才会为真。

在PyCharm中,当值超过256时,is和==的输出还是一样的。这是因为解释器也做了一些优化,缓存了数字、字符串等变量。

我们来看看终端命令行中变量是字符串时的情况:

 1 >>> a = "hello world"
 2 >>> b = "hello world"
 3 >>> a == b
 4 True
 5 >>> a is b
 6 False
 7 >>> id(a)
 8 4359747248
 9 >>> id(b)
10 4361247408
 1 >>> a = "hello"
 2 >>> b = "hello"
 3 >>> a == b
 4 True
 5 >>> a is b
 6 True
 7 >>> id(a)
 8 4361199040
 9 >>> id(b)
10 4361199040

从输出结果可以看出,当变量为命令行中的简单字符串时,输出结果一致,否则输出结果不一致。这是因为 Python 还会缓存简单的字符串对象,这意味着可以优化代码运行得更快并减少内存消耗。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享