扣丁學(xué)堂剖析Python視頻教程之is和= =的區(qū)別是什么
2017-12-20 09:57:17
1932瀏覽
今天扣丁學(xué)堂給大家介紹一下關(guān)于
Python視頻教程之is和==的區(qū)別是什么?首先在Python中一切都是對象,Python中對象包含的三個基本要素,分別是:id(身份標(biāo)識)、type(數(shù)據(jù)類型)和value(值)。對象之間比較是否相等可以用==,也可以用is。目前is和==都是對對象進(jìn)行比較判斷作用的,但對對象比較判斷的內(nèi)容并不相同。下面來看看具體區(qū)別在哪?
is比較的是兩個對象的id值是否相等,也就是比較兩個對象是否為同一個實例對象,是否指向同一個內(nèi)存地址。
==比較的是兩個對象的內(nèi)容是否相等,默認(rèn)會調(diào)用對象的__eq__()方法。以下代碼在Python3.5下測試通過。
==比較操作符和is同一性運(yùn)算符區(qū)別,==是python標(biāo)準(zhǔn)操作符中的比較操作符,用來比較判斷兩個對象的value(值)是否相等。
代碼1:
>>>a=[1,2,3]
>>>b=a
>>>bisa
True
>>>b==a
True
>>>b=a[:]
>>>bisa
False
>>>b==a
True
解釋一下為什么?is也被叫做同一性運(yùn)算符,也就是id是否相同??聪旅娲a,a和b變量的id不同,所以b==a是True,bisa是False.
代碼2:
>>>id(a)
4364243328
>>>
>>>id(b)
4364202696
哪些情況下is和==結(jié)果是完全相同的?
代碼3:
>>>a=256
>>>b=256
>>>aisb
True
>>>a==b
True
>>>
>>>a=1000
>>>b=10**3
>>>a==b
True
>>>aisb
False
>>>
結(jié)論:數(shù)字類型不完全相同。為什么256時相同,而1000時不同?因為出于對性能的考慮,Python內(nèi)部做了很多的優(yōu)化工作,對于整數(shù)對象,Python把一些頻繁使用的整數(shù)對象緩存起來,保存到一個叫small_ints的鏈表中,在Python的整個生命周期內(nèi),任何需要引用這些整數(shù)對象的地方,都不再重新創(chuàng)建新的對象,而是直接引用緩存中的對象。Python把這些可能頻繁使用的整數(shù)對象規(guī)定在范圍[-5,256]之間的小對象放在small_ints中,但凡是需要用些小整數(shù)時,就從這里面取,不再去臨時創(chuàng)建新的對象。
代碼4:
>>>c=codingke.com'
>>>d=codingke.com'
>>>cisd
False
>>>c==d
True
>>>c='codingkecom'
>>>d='codingkecom'
>>>cisc
True
>>>c==d
True
結(jié)論:字符串類型不完全相同。這個和解釋器實現(xiàn)有關(guān)。
代碼5:
>>>a=(1,2,3)#a和b為元組類型
>>>b=(1,2,3)
>>>aisb
False
>>>a=[1,2,3]#a和b為list類型
>>>b=[1,2,3]
>>>aisb
False
>>>a={codingke:100,'com':1}#a和b為dict類型
>>>b={codingke:100,'com':1}
>>>aisb
False
>>>a=set([1,2,3])#a和b為set類型
>>>b=set([1,2,3])
>>>aisb
False
結(jié)論:當(dāng)變量是數(shù)字、字符串、元組,列表,字典時,is和==都不相同,不能互換使用!當(dāng)比較值時,要使用==,比較是否是同一個內(nèi)存地址時應(yīng)該使用is。當(dāng)然,開發(fā)中比較值的情況比較多。
以上就是關(guān)于Python視頻教程之is和==的區(qū)別的詳細(xì)介紹,最后想要了解更多資訊或?qū)W習(xí)Python開發(fā)請關(guān)注扣丁學(xué)堂官網(wǎng)和微信公眾號??鄱W(xué)堂作為知名的IT培訓(xùn)機(jī)構(gòu),不僅有專業(yè)的Python培訓(xùn)講師和與時俱進(jìn)的課程體系,還有大量的Python全棧開發(fā)工程師視頻教程供學(xué)員觀看學(xué)習(xí),想要學(xué)好Python開發(fā)技術(shù)的小伙伴就抓緊時間行動吧??鄱W(xué)堂Python技術(shù)交流群:279521237。
【關(guān)注微信公眾號獲取更多學(xué)習(xí)資料】
查看更多關(guān)于“Python開發(fā)資訊”的相關(guān)文章>>
標(biāo)簽:
Python視頻教程
Python基礎(chǔ)教程
Python爬蟲
Python培訓(xùn)