一文搞懂Python中is和==的區(qū)別
在Python中一切都是對象。
Python中對象包含的三個基本要素,分別是:id(身份標(biāo)識)、type(數(shù)據(jù)類型)和value(值)。對象之間比較是否相等可以用==,也可以用is。
is和==都是對對象進行比較判斷作用的,但對對象比較判斷的內(nèi)容并不相同。下面來看看具體區(qū)別在哪?
is比較的是兩個對象的id值是否相等,也就是比較兩個對象是否為同一個實例對象,是否指向同一個內(nèi)存地址。
==比較的是兩個對象的內(nèi)容是否相等,默認(rèn)會調(diào)用對象的__eq__()方法。
以下代碼在Python3.5下測試通過。
==比較操作符和is同一性運算符區(qū)別
==是python標(biāo)準(zhǔn)操作符中的比較操作符,用來比較判斷兩個對象的value(值)是否相等。
代碼1:
>>> a = [1, 2, 3] >>> b = a >>> b is a True >>> b == a True >>> b = a[:] >>> b is a False >>> b == a True
解釋一下為什么?is也被叫做同一性運算符,也就是id是否相同??聪旅娲a, a和b變量的id不同, 所以b==a是True, b is a 是False.
代碼2:
>>> id(a) 4364243328 >>> >>> id(b) 4364202696
哪些情況下is和==結(jié)果是完全相同的?
代碼3:
>>> a = 256 >>> b = 256 >>> a is b True >>> a == b True >>> >>> a = 1000 >>> b = 10**3 >>> a == b True >>> a is b 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 = 'pythontab.com' >>> d = 'pythontab.com' >>> c is d False >>> c == d True >>> c = 'pythontabcom' >>> d = 'pythontabcom' >>> c is c True >>> c == d True
結(jié)論:字符串類型不完全相同。這個和解釋器實現(xiàn)有關(guān)。
代碼5:
>>> a = (1,2,3) #a和b為元組類型
>>> b = (1,2,3)
>>> a is b
False
>>> a = [1,2,3] #a和b為list類型
>>> b = [1,2,3]
>>> a is b
False
>>> a = {'python':100,'com':1} #a和b為dict類型
>>> b = {'python':100,'com':1}
>>> a is b
False
>>> a = set([1,2,3])#a和b為set類型
>>> b = set([1,2,3])
>>> a is b
False結(jié)論
當(dāng)變量是數(shù)字、字符串、元組,列表,字典時,is和==都不相同, 不能互換使用!當(dāng)比較值時,要使用==,比較是否是同一個內(nèi)存地址時應(yīng)該使用is。當(dāng)然,開發(fā)中比較值的情況比較多。
在Python中一切都是對象。
Python中對象包含的三個基本要素,分別是:id(身份標(biāo)識)、type(數(shù)據(jù)類型)和value(值)。對象之間比較是否相等可以用==,也可以用is。
is和==都是對對象進行比較判斷作用的,但對對象比較判斷的內(nèi)容并不相同。下面來看看具體區(qū)別在哪?
is比較的是兩個對象的id值是否相等,也就是比較兩個對象是否為同一個實例對象,是否指向同一個內(nèi)存地址。
==比較的是兩個對象的內(nèi)容是否相等,默認(rèn)會調(diào)用對象的__eq__()方法。
以下代碼在Python3.5下測試通過。
==比較操作符和is同一性運算符區(qū)別
==是python標(biāo)準(zhǔn)操作符中的比較操作符,用來比較判斷兩個對象的value(值)是否相等。
代碼1:
>>> a = [1, 2, 3] >>> b = a >>> b is a True >>> b == a True >>> b = a[:] >>> b is a False >>> b == a True
解釋一下為什么?is也被叫做同一性運算符,也就是id是否相同??聪旅娲a, a和b變量的id不同, 所以b==a是True, b is a 是False.
代碼2:
>>> id(a) 4364243328 >>> >>> id(b) 4364202696
哪些情況下is和==結(jié)果是完全相同的?
代碼3:
>>> a = 256 >>> b = 256 >>> a is b True >>> a == b True >>> >>> a = 1000 >>> b = 10**3 >>> a == b True >>> a is b 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 = 'pythontab.com' >>> d = 'pythontab.com' >>> c is d False >>> c == d True >>> c = 'pythontabcom' >>> d = 'pythontabcom' >>> c is c True >>> c == d True
結(jié)論:字符串類型不完全相同。這個和解釋器實現(xiàn)有關(guān)。
代碼5:
>>> a = (1,2,3) #a和b為元組類型
>>> b = (1,2,3)
>>> a is b
False
>>> a = [1,2,3] #a和b為list類型
>>> b = [1,2,3]
>>> a is b
False
>>> a = {'python':100,'com':1} #a和b為dict類型
>>> b = {'python':100,'com':1}
>>> a is b
False
>>> a = set([1,2,3])#a和b為set類型
>>> b = set([1,2,3])
>>> a is b
False結(jié)論
當(dāng)變量是數(shù)字、字符串、元組,列表,字典時,is和==都不相同, 不能互換使用!當(dāng)比較值時,要使用==,比較是否是同一個內(nèi)存地址時應(yīng)該使用is。當(dāng)然,開發(fā)中比較值的情況比較多。
到此這篇關(guān)于一文搞懂Python中is和==的區(qū)別的文章就介紹到這了,更多相關(guān)Python中is和==的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于PyQt5實現(xiàn)的Windows定時關(guān)機工具
在日常使用電腦的過程中,我們經(jīng)常會遇到需要定時關(guān)機的場景,雖然 Windows 自帶 shutdown 命令可以定時關(guān)機,但操作方式較為繁瑣,缺乏可視化界面,因此,本篇文章將帶大家實現(xiàn)一個基于 PyQt5 的 Windows 定時關(guān)機工具,需要的朋友可以參考下2025-04-04
Python socket套接字實現(xiàn)C/S模式遠程命令執(zhí)行功能案例
這篇文章主要介紹了Python socket套接字實現(xiàn)C/S模式遠程命令執(zhí)行功能,涉及Python socket套接字編寫服務(wù)器/客戶機模式數(shù)據(jù)傳輸相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
跟老齊學(xué)Python之私有函數(shù)和專有方法
這篇文章是老齊學(xué)Python系列文章的一篇,主要介紹了跟私有函數(shù)和專有方法,需要的朋友可以參考下2014-10-10
Python使用Streamlit打造高效的測試數(shù)據(jù)生成器
這篇文章主要為大家詳細介紹了如何利用 Python 的 Streamlit 和 Faker 庫,快速構(gòu)建一個簡單實用的測試數(shù)據(jù)生成器,幫助測試工程師一鍵生成高質(zhì)量的測試數(shù)據(jù),感興趣的可以了解下2025-04-04
用python寫個自動SSH登錄遠程服務(wù)器的小工具(實例)
下面小編就為大家?guī)硪黄胮ython寫個自動SSH登錄遠程服務(wù)器的小工具(實例)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06

