当前位置: 首页 > 图灵资讯 > 行业资讯> Python中==和is有什么区别

Python中==和is有什么区别

发布时间:2025-10-13 17:51:55

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

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

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

a="helloworld"
b="helloworld"
print(a==b)#True
print(aisb)#True
print(id(a))#4461408208
print(id(b))#4461408208

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

在上述代码中,我们分别定义了它 a 和 b 当变量为字符串或数字时,可以通过输出结果找到两个变量, is 和 == 在列表中,输出结果是相同的, is 和 == 通过打印两个变量,结果不同 id 两个值可以看出来 id 这是因为当我们创建列表时,它是不同的 a 和 b 当时,两个内存被分别打开来存储这两个变量。从外观上看,结果是相同的,但两个变量指向的内存地址是不同的。我们将上述代码改为以下代码:

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

在上述代码中,我们没有直接给出变量 b 赋值,而是让 b=a,这样的话 b 和 a 它指向相同的内存,因此 a is b 就为 True 了。

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

1>>>a=10000
2>>>b=10000
3>>>a==b
4True
5>>>aisb
6False
7>>>id(a)
84360555120
9>>>id(b)
104360555216

相关推荐:Python视频教程

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

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

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

在 PyCharm 当值超过中等 256 时 is 和 == 输出结果仍然相同,因为解释器也部分优化,缓存了数字和字符串等变量。

让我们来看看在终端命令行中变量为字符串时:

1>>>a="helloworld"
2>>>b="helloworld"
3>>>a==b
4True
5>>>aisb
6False
7>>>id(a)
84359747248
9>>>id(b)
104361247408
1>>>a="hello"
2>>>b="hello"
3>>>a==b
4True
5>>>aisb
6True
7>>>id(a)
84361199040
9>>>id(b)
104361199040

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

相关文章

Python中==和is有什么区别

Python中==和is有什么区别

2025-10-13
Python中的opener()方法是什么

Python中的opener()方法是什么

2025-10-13
Python之requests模块相关介绍

Python之requests模块相关介绍

2025-10-12
如何利用Python进行垃圾分类

如何利用Python进行垃圾分类

2025-10-12
Python中字典的用法

Python中字典的用法

2025-10-12
Python中元祖的用法

Python中元祖的用法

2025-10-12