Python中is和==的區別


一、簡介:

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 #ab為數值類型
>>> b = 1
>>> a is b
True
>>> id(a)
14318944
>>> id(b)
14318944

三、結論:

  1. 只要各對象的值一樣,則 x == y 的值一定為True;
  2. 只有數值型和字符串型,並且在通用對象池中的情況下,a is b才為True,否則當a和b是int,str,tuple,list,dict或set型時,a is b均為False。

四、原因:

  1. ==只比較值是否相等,is比較id是否相同。
  2. 事實上Python 為了優化速度,使用了小整數對象池,避免為整數頻繁申請和銷毀內存空間。而Python 對小整數的定義是 [-5, 257),只有數字在-5到256之間它們的id才會相等,超過了這個范圍就不行了,同樣的道理,字符串對象也有一個類似的緩沖池,超過區間范圍內自然不會相等了。

   

   

   

   

   

   

   

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM