爬虫工具

Python:is 和 == 的区别、小整数对象池 及 inte

2020-07-19  本文已影响0人  dex0423

1. 区别

2. 示例

>>> a = [1, 2, 3]
>>> b = [1, 2, 3]

>>> print("a 的 id: ", id(a))
>>> print("b 的 id:", id(b))

>>> print("is 比较结果 : ", a is b)
>>> print("== 比较结果 :", a == b)

a 的 id:  1811151687176
b 的 id: 1811151687368
is 比较结果 :  False
== 比较结果 : True

3. 注意

3.1. 小整数对象池

>>> a = 1
>>> b = 1

>>> c = 257
>>> d = 257

>>> print("a 的 id: ", id(a))
a 的 id:  140712010608912
>>> print("b 的 id:", id(b))
b 的 id: 140712010608912

>>> print("c 的 id: ", id(c))
c 的 id:  2280561690800
>>> print("d 的 id:", id(d))
d 的 id: 2280561690672

>>> print("is 比较结果 : ", a is b)
is 比较结果 :  True
>>> print("== 比较结果 :", a == b)
== 比较结果 : True

>>> print("is 比较结果 : ", c is d)   
is 比较结果 :  False                    # 注意:c 和 d 的内存地址(id)不同,所以此处比较结果为 false
>>> print("== 比较结果 :", c == d)
== 比较结果 : True

3.2. intern机制

>>> a = "abc"
>>> b = "abc"
>>>
>>> c = "abc 123"    # 注意: 字符串中间有空格
>>> d = "abc 123"
>>>
>>> print("a 的 id: ", id(a))
a 的 id:  2280562311088
>>> print("b 的 id:", id(b))
b 的 id: 2280562311088
>>>
>>> print("c 的 id: ", id(c))
c 的 id:  2280593916464
>>> print("d 的 id:", id(d))
d 的 id: 2280593916528
>>>
>>> print("is 比较结果 : ", a is b)
is 比较结果 :  True
>>> print("== 比较结果 :", a == b)
== 比较结果 : True
>>>
>>> print("is 比较结果 : ", c is d)
is 比较结果 :  False                       # 注意:c 和 d 的内存地址(id)不同,所以此处比较结果为 false
>>> print("== 比较结果 :", c == d)
== 比较结果 : True

4. 探讨

image.png
上一篇 下一篇

猜你喜欢

热点阅读