摘要:在說和的區別之前,我們先理解下的變量。的變量和的變量有很大的區別,因為一個是動態語言,另一個是靜態語言。結果可以看到,是相等的。現在我們再看看和之間的區別。這是為了防止你不小心創建了多個相同對象而浪費大量內存甚至會發生擠爆內存的后果。
在說 is 和 == 的區別之前,我們先理解下python的變量。python的變量和java的變量有很大的區別,因為一個是動態語言,另一個是靜態語言。
java的變量就像是個盒子,是把對象的地址裝進這個盒子內,就會有大的或者小的盒子。而python的變量像個便利貼,把他貼在哪個地方都可以,不需要管數據類型,只要你喜歡就可以。說太多沒有用,得用代碼體會下。
a?=?1
上面的代碼過程是先在內存中生成了一個int的對象,然后我們把這個便利貼 a 貼在了上面,從此a變量就指向了這個對象。我們還可以看看下面這個。
a?= [1,?2] b?=?a b.append(3) print(a) # 結果[1,?2,?3]
這里是把a貼在了一個列表上,然后又用b指向a,接著操作b但是卻打印了出了b的結果。這是因為a和b都是便利貼,都貼在了同一個列表上,所以操作一個的話,另外一個也會變化。或者我們可以看看這兩個變量指向的對象是否是同于一個對象。
print(a?is?b) print(id(a), id(b)) # 結果True1461897824584?1461897824584
可以看到,是相等的。
現在我們再看看is和==之間的區別。我們還是先看一個例子。
a?= [1,?2,?3] b?= [1,?2,?3] print(a?is?b) print(a?==?b)
大家可以先猜猜結果是什么。我之前說了python的變量就是個便利貼,[1, 2, 3]都是直接賦值給兩個變量,也就是說生成了兩個對象,所以a,b指向的對象不一樣。所以結果出來了,第一個是False,第二個是True。為什么呢?因為is比較的是對象相同不相同,但是==比較的是值相同不相同。如果打印兩個id值的話,顯然是不同的。
print(id(a),?id(b)) # 結果1735698385160?1735679028936
但是這個呢?
a =?1 b =?1 print(a?is?b) print(id(a), id(b)) # 結果True1956929696?1956929696
為什么這個又相等了呢?這是因為python中有個intern機制。
intern機制就是不管你創建了多少個相同的字符串,在python中都是會指向同一個對象的。這是為了防止你不小心創建了多個相同對象而浪費大量內存甚至會發生擠爆內存的后果。有了這個理解,我們再看看下面例子就容易得出答案了。
a =?"str" b =?"s"?+?"tr" print(a?is?b)?# 結果 True c =?"hello world" d =?"hello world" print(c?is?d)?# 結果 True
再來到==的實際調用,在用==進行判斷的時候實際是調用魔法函數__eq__()來判斷他們的值是否相等的。
總的來說,我們在判斷是否是同一個對象的時候就用is,不要用==,所以在判斷該對象是什么類型的時候建議用is或者直接用isinstance()這個方法。
class?Person(): pass p = Person() print(type(p)?is?Person) ?# 結果 True
為什么上面結果是True呢?這是因為我們之前說過類本身也是個對象,用type()方法會指向該對象,又因為這個類,也就是對象是唯一的,所以結果就是True。
完畢!
ps:如果覺得文章不錯的話,歡迎隨手點贊轉發支持
掃描二維碼關注公眾號獲取更多資訊
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42124.html
摘要:簡述正則表達式是處理字符串的利器,并提高工作效率,一個好的正則能夠幫我們省去幾十甚至上百行代碼。 簡述 正則表達式是處理字符串的利器,并提高工作效率,一個好的正則能夠幫我們省去幾十甚至上百行代碼。在工作中,也許你會見到在代碼中出現很多正則處理字符串,也可能見到代碼中毫無正則,原因在于會正則的人往往處理字符串首先想到用正則去處理,不會的那必然用很多API處理。并且在面試的時候很多同學往往...
摘要:大家好,在我們上一篇復習了的基礎和實用技巧后,今天我們來看一下里的邏輯關系,所謂邏輯關系無非就是如果就否則之類的,不是非常復雜,我的意思是復雜的地方不用目前了解,因為已經超出了小白的水準,哈哈,閑話少說,讓我們一起來看看吧什么是里面用的形 大家好,在我們上一篇復習了dict的基礎和實用技巧后,今天我們來看一下Python里的邏輯關系,所謂邏輯關系無非就是如果...就...否則...之類...
摘要:在生產者與消費者之間的緩沖區稱之為倉庫。生產者負責往倉庫運輸商品,而消費者負責從倉庫里取出商品,這就構成了生產者消費者模式。中的多線程編程在實現生產者消費者模式之前,我們先學習下中的多線程編程。 什么是生產者消費者模式 在軟件開發的過程中,經常碰到這樣的場景:某些模塊負責生產數據,這些數據由其他模塊來負責處理(此處的模塊可能是:函數、線程、進程等)。產生數據的模塊稱為生產者,而處理數據...
閱讀 1067·2021-11-23 09:51
閱讀 2412·2021-09-29 09:34
閱讀 3150·2019-08-30 14:20
閱讀 1045·2019-08-29 14:14
閱讀 3182·2019-08-29 13:46
閱讀 1077·2019-08-26 13:54
閱讀 1634·2019-08-26 13:32
閱讀 1427·2019-08-26 12:23