教程集 www.jiaochengji.com
教程集 >  Python编程  >  Python入门  >  正文 Python中==和is有什么区别

Python中==和is有什么区别

发布时间:2021-12-06   编辑:jiaochengji.com
教程集为您提供Python中==和is有什么区别等资源,欢迎您收藏本站,我们将为您提供最新的Python中==和is有什么区别资源

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

is 比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同。即is比较两个条件:1.内容相同。2.内存中地址相同。

<pre class="brush:php;toolbar:false">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</pre>

在上面的代码中,我们分别定义了 a 和 b 两个变量,通过输出结果可以发现当变量为字符串或数字时, is 和 == 的输出结果是一样的,当为列表时 is 和 == 结果不一样,通过打印两个变量的 id 值可以看出两个 id 值不一样,这是由于当我们创建列表 a 和 b 时,是分别开辟了两块内存来分别存储这两个变量,从表象上来看结果是一样的,但两个变量所指向的内存地址不一样,我们将上面的代码改为如下:

<pre class="brush:php;toolbar:false">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</pre>

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

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

<pre class="brush:php;toolbar:false"> 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</pre>

相关推荐:《Python视频教程》

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

<pre class="brush:php;toolbar:false">>>> a = 100 >>> b = 100 >>> a == b True >>> a is b True >>> id(a) 4357367984 >>> id(b) 4357367984</pre>

造成上面的原因是因为python对小整数在内存中直接创建了一份,不会回收,所有创建的小整数变量直接从对象池中引用他即可。但是注意Python仅仅对比较小的整数对象进行缓存(范围为范围[-5, 256])缓存起来,而并非是所有整数对象。也就说只有在这个[-5,256]范围内创建的变量值使用is比较时候才会成立。

在 PyCharm 中,当值超过 256 时 is 和 == 的输出结果仍是一样,这是因为解释器也做了一部分优化,对于数字和字符串这类变量都进行了缓存。

我们再来看一下在终端命令行中当变量为字符串时:

<pre class="brush:php;toolbar:false"> 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</pre><pre class="brush:php;toolbar:false"> 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</pre>

通过输出结果可以看出,在命令行中当变量为简单字符串时输出结果一致,否则输出结果不一致,这是由于 Python 对简单字符串对象也进行了缓存,这样做的意义是可以优化代码的运行速度,减少内存消耗。

您可能感兴趣的文章:
Python none和0区别是什么
python中双引号和单引号的区别是什么
python中元组和列表有什么区别
python语言采用严格的什么
python缩进有什么用
Python中==和is有什么区别
python迭代器和生成器区别是什么
Python中lambda和def有什么区别
asp中CodePage、Response.CodePage和Session.CodePage区别介绍
python3.6和2.7的区别是什么

[关闭]
~ ~