Python的“is”与“==”

Python比较两个对象是否相等有两种方法,简单来说,它们的区别如下:

1,is 是比较两个引用是否指向同一个对象(引用比较)

2,==是比较两个对象的值是否相等。

>>>a = [2,3,4]
>>>b = a
>>>b is a
True
>>>b = a[:] # 切片操作重新分配了对象
>>>b is a
False
>>>b == a #值是相等的
True    

实现原理
is 是比较两者是否同一个对象,比较的是内存地址(id是否相等)。

==是值比较,不可变对象,列如int,str,它会直接进行值比较。对于python已知的对象,会调用__sq__函数来比较。

对象缓存机制

Python会对比较小的对象缓存,下次用到时,回去缓存区查找,如果找到,不回再去开辟新的内存,而是继续把小对象的地址赋给新的值

1 c = 1
2 d = 1
3 print(c is d)
4 True
5 
6 1000 is 10**3
7 False
8 1000 == 10**3
9 True

通过计算得到的赋值不会使用缓存区。

原文地址:https://www.cnblogs.com/youyuan-wang/p/6090680.html