一、簡介:
Python中有很多運算符,今天我們就來講講is和==兩種運算符在應用上的本質區別是什么。
在講is和==這兩種運算符區別之前,首先要知道Python中對象包含的三個基本要素,分別是:id(身份標識)、type(數據類型)和value(值)。
==比較操作符和is同一性運算符區別,is 用於判斷兩個變量引用對象是否為同一個, == 用於判斷引用變量的值是否相等。類似於Java中的equal()和==。
二、實驗:
>>> x = y = [4,5,6]
>>> z = [4,5,6]
>>> x == y
True
>>> x == z
True
>>> x is y
True
>>> x is z
False
>>>
>>> print id(x)
3075326572
>>> print id(y)
3075326572
>>> print id(z)
3075328140
>>> a = 1 #a和b為數值類型
>>> b = 1
>>> a is b
True
>>> id(a)
14318944
>>> id(b)
14318944
三、結論:
- 只要各對象的值一樣,則 x == y 的值一定為True;
- 只有數值型和字符串型,並且在通用對象池中的情況下,a is b才為True,否則當a和b是int,str,tuple,list,dict或set型時,a is b均為False。
四、原因:
- ==只比較值是否相等,is比較id是否相同。
- 事實上Python 為了優化速度,使用了小整數對象池,避免為整數頻繁申請和銷毀內存空間。而Python 對小整數的定義是 [-5, 257),只有數字在-5到256之間它們的id才會相等,超過了這個范圍就不行了,同樣的道理,字符串對象也有一個類似的緩沖池,超過區間范圍內自然不會相等了。