日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python中is與==是什么有什么區(qū)別-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)從2013年創(chuàng)立,公司以網(wǎng)站設(shè)計制作、成都網(wǎng)站設(shè)計、系統(tǒng)開發(fā)、網(wǎng)絡(luò)推廣、文化傳媒、企業(yè)宣傳、平面廣告設(shè)計等為主要業(yè)務(wù),適用行業(yè)近百種。服務(wù)企業(yè)客戶上1000家,涉及國內(nèi)多個省份客戶。擁有多年網(wǎng)站建設(shè)開發(fā)經(jīng)驗。為企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、創(chuàng)意設(shè)計、宣傳推廣等服務(wù)。 通過專業(yè)的設(shè)計、獨(dú)特的風(fēng)格,為不同客戶提供各種風(fēng)格的特色服務(wù)。

小編給大家分享一下Python中is與==是什么有什么區(qū)別,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

is 和 ==

先了解下官方文檔中關(guān)于 is 和 == 的概念。is 表示的是對象標(biāo)示符(object identity),而 == 表示的是相等(equality);is 的作用是用來檢查對象的標(biāo)示符是否一致,也就是比較兩個對象在內(nèi)存中的地址是否一樣(相當(dāng)于檢查 id(a) == id(b)),而 == 是用來檢查兩個對象引用的值是否相等(相當(dāng)于檢查 a.eq(b));這點(diǎn)和Java有點(diǎn)類似,只不過Java中是用 == 來比較兩個對象在內(nèi)存中的地址,用 equals() 來檢查兩者之間的值是否相等。

Python中is與==是什么有什么區(qū)別

字符串駐留機(jī)制

Python中的字符串采用了intern機(jī)制,當(dāng)需要值相同的字符串的時候(比如標(biāo)識符),可以直接從字符串池里拿來使用,避免頻繁的創(chuàng)建和銷毀,提升效率和節(jié)約內(nèi)存,因此拼接和修改字符串是會比較影響性能的。因為是不可變的,所以字符串的操作都不是replace,而是新建對象,這也是為什么拼接多字符串的時候不建議用+而用join(),join()是先計算出所有字符串的長度,然后再拷貝,只new一次對象。需要注意的是,并不是所有的字符串都會采用intern機(jī)制,當(dāng)且僅當(dāng)只包含下劃線、數(shù)字、字母的字符串才會被intern。

相關(guān)示例

示例一

a = "hello"
b = "hello"
print(a is b)  # 輸出 True 
print(a == b)  # 輸出 True

值相同的簡單字符串對象在字符串池里只會保存一份,這決定了字符串必須是不可變對象,所以a和b是同一個對象。

示例二

a = "hello world"
b = "hello world"
print(a is b)  # 輸出 False
print(a == b)  # 輸出 True

a和b中都有空格,所以不會被intern(空格不是python標(biāo)識符),故a和b不是同一個對象。注意,這僅僅是在交互式命令行中執(zhí)行,而在PyCharm或者保存為文件執(zhí)行,結(jié)果是不一樣的,主要是因為解釋器做了一部分優(yōu)化。

示例三

a = 'ab' + 'c' is 'abc'
print(a)  # 輸出 True
ab = 'ab'
b = ab + 'c' is 'abc'
print(b)  # 輸出 False

第一個'ab'+'c'是在compile-time(編譯期)求值的,被替換成了'abc',所以輸出為True;第二個示例,ab+'c'是在run-time(運(yùn)行期)拼接的,導(dǎo)致沒有被自動intern。

示例四

a = [1, 2, 3]
b = [1, 2, 3]
print(a is b)  # 輸出 False
print(a == b)  # 輸出 True

a和b是列表,不是同一個對象。

示例五

a = [1, 2, 3]
b = a
print(a is b)  # 輸出 True 
print(a == b)  # 輸出 True

把a(bǔ)的引用復(fù)制給b(引用賦值),在內(nèi)存中其實(shí)是指向同一個對象。

示例六

a = ["I", "love", "Python"]
b = a[:]
print(a is b)  # 輸出 False
print(a == b)  # 輸出 True
print(a[0] is b[0])  # 輸出 True
print(a[0] == b[0])  # 輸出 True

b通過切片操作重新分配了對象(切片賦值),但值和a相同。由于切片拷貝是淺拷貝,這說明列表中的元素并未重新創(chuàng)建,因此a[0] is b[0]輸出為True。

示例七

a = 1
b = 1
print(a is b)  # 輸出 True
print(a == b)  # 輸出 True

Python會對比較小的整數(shù)對象進(jìn)行緩存,下次用的時候直接從緩存中獲取。

示例八

a = 320
b = 320
print(a is b)  # 輸出 False
print(a == b)  # 輸出 True

Python僅僅對比較小的整數(shù)對象進(jìn)行緩存(范圍為范圍[-5, 256]),而并非是所有整數(shù)對象。注意,這僅僅是在交互式命令行中執(zhí)行,而在PyCharm或者保存為文件執(zhí)行,結(jié)果是不一樣的,主要是因為解釋器做了一部分優(yōu)化。

is 與 == 對比

is 與 == 相比計算速度會更快,因為它不能重載,不用進(jìn)行特殊的函數(shù)調(diào)用,通過直接比較兩個整數(shù) id,減少了函數(shù)調(diào)用的開銷。而 a == b 則是等同于a.eq(b),繼承自 object 的 eq 方法原本也是比較兩個對象的id,結(jié)果與 is 一樣,但大多數(shù)Python對象會覆蓋重寫object的 eq 方法,而定義內(nèi)容的相關(guān)比較,所以比較的是對象屬性的值。

在變量和單例值之間比較時,應(yīng)該使用 is。目前,最常使用 is 的地方是當(dāng)判斷對象是不是 None,下面是推薦的寫法: xxx is None;判斷不是None的推薦寫法是: xxx is not None。

以上是Python中is與==是什么有什么區(qū)別的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!


網(wǎng)頁標(biāo)題:Python中is與==是什么有什么區(qū)別-創(chuàng)新互聯(lián)
鏈接地址:http://www.dlmjj.cn/article/gcppp.html