Python中有很多运算符,今天我们就来讲讲is和==两种运算符在应用上的本质区别是什么。
首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)。
==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等,而is是用来比较判断两个对象的id(身份标识)是否相等。例如下面的比较:
1、整数比较
a = 257633
b = 257633
print(id(a))
print(id(b))
print(a is b)
E:\Anaconda3\envs\env_OpenCV\python.exe E:/DeskTop/OpenCV/OpenCV_Book_Codes/1.py
2276735280016
2276735280016
True
Process finished with exit code 0
2、浮点数比较
a = 257633.908
b = 257633.908
print(id(a))
print(id(b))
print(a is b)
E:\Anaconda3\envs\env_OpenCV\python.exe E:/DeskTop/OpenCV/OpenCV_Book_Codes/1.py
1788197364656
1788197364656
True
Process finished with exit code 0
3、字符串比较
a = "helloWorld"
b = "helloWorld"
print(id(a))
print(id(b))
print(a is b)
E:\Anaconda3\envs\env_OpenCV\python.exe E:/DeskTop/OpenCV/OpenCV_Book_Codes/1.py
2490980516784
2490980516784
True
Process finished with exit code 0
4、元组比较
a = (1, 2, 3)
b = (1, 2, 3)
print(id(a))
print(id(b))
print(a is b)
E:\Anaconda3\envs\env_OpenCV\python.exe E:/DeskTop/OpenCV/OpenCV_Book_Codes/1.py
1217654659416
1217654659416
True
Process finished with exit code 0
5、列表比较
a = [1, 2, 3]
b = [1, 2, 3]
print(id(a))
print(id(b))
print(a is b)
print(a == b)
E:\Anaconda3\envs\env_OpenCV\python.exe E:/DeskTop/OpenCV/OpenCV_Book_Codes/1.py
2293379322312
2293379322824
False
True
Process finished with exit code 0
6、字典比较
a = {1: '1', 2: '2', 3: '3'}
b = {1: '1', 2: '2', 3: '3'}
print(id(a))
print(id(b))
print(a is b)
print(a == b)
E:\Anaconda3\envs\env_OpenCV\python.exe E:/DeskTop/OpenCV/OpenCV_Book_Codes/1.py
2160312718984
2160312816808
False
True
Process finished with exit code 0
7、总结
python一切皆对象,id()可获得对象地址(s身份标识)但是对于一些基础的python对象python有intern机制,重复创建时不会在创建新的对象,而是直接一个指针指向原对象。