Python中==和is有什么区别

== 比较两个对象的内容是否相等,即两个对象的“值”是否相等,无论两个对象在内存中的引用地址是否相同。
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 还缓存了简单字符串对象,这意味着可以优化代码的运行速度,减少内存消耗。
