0%

Python中is和==的区别

Python中对象包含的三个基本要素:id(身份标识)type(数据类型)value(值)

==是python标准操作符中的比较操作符,比较两个对象的value(值)是否相等,例如,

1
2
3
a = 'cheesezh'
b = 'cheesezh'
a == b # True
is运算符比较对象间的唯一身份标识,也就是id是否相同。例如,
1
2
3
4
5
6
7
8
9
10
x = y = [4, 5, 6]
z = [4, 5, 6]
x == y # True
x is y # True
x == z # True
x is z # False

print(id(x)) # 3075326572
print(id(y)) # 3075326572
print(id(z)) # 3075328140

同一类型且赋值相同的a和b,a==b结果都为True,而a is b结果如下,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# a, b为数值类型
a = 1
b = 1
print(a == b) # True
print(a is b) # True
print(id(a) == id(b)) # Ture

# a, b为字符串(str)类型
a = 'abcdefg'
b = 'abcdefg'
print(a == b) # True
print(a is b) # True
print(id(a) == id(b)) # True

# a, b为元组(tuple)类型
a = (1, 2, 3)
b = (1, 2, 3)
print(a == b) # True
print(a is b) # True
print(id(a) == id(b)) # True

# a, b为列表(list)类型
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True
print(a is b) # False
print(id(a) == id(b)) # False

# a, b为集合(set)类型
a = {1, 2, 3}
b = {1, 2, 3}
print(a == b) # True
print(a is b) # False
print(id(a) == id(b)) # False

# a, b为字典(dict)类型
a = {1: 'aaa', 2: 'bbb', 3: "ccc"}
b = {1: 'aaa', 2: 'bbb', 3: "ccc"}
print(a == b) # True
print(a is b) # False
print(id(a) == id(b)) # False

总结:

  • 同一类型且赋值相同的变量a和b,a==b结果为True,即a和b的value相同;
  • 同一类型且赋值相同的变量a和b,当a和b的数据类型是数值、字符串str和元组tuple时,a is b为True,即id相同;当a和b的数据类型是列表list,字典dict或集合set时,a is b为False,即id不同。
  • 同一类型且赋值相同的变量a和b,id相同则value相同,即a is b则a == b;value相同但id不一定相同,即a==b但a is b不一定为True。
  • 定义两个相同大小的可变类型变量,内存开辟两个空间,分别存储两个值,所以两个变量value相同但id不同;定义两个相同大小的不可变类型的变量,内存只开辟一个空间存储值,两个变量引用同一个空间内的值,所以两个变量value和id都相同。
天生我材必有用,千金散尽还复来~
  • 本文作者: XTLei
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
-------------本文结束感谢您的阅读-------------