1樓:你還好嗎
在python中一切都是物件。
python中物件包含的三個基本要素,分別是:id(身份標識)、type(資料型別)和value(值)。物件之間比較是否相等可以用==,也可以用is。
is和==都是對物件進行比較判斷作用的,但對物件比較判斷的內容並不相同。下面來看看具體區別在哪?
is比較的是兩個物件的id值是否相等,也就是比較兩個物件是否為同一個例項物件,是否指向同一個記憶體地址。
==比較的是兩個物件的內容是否相等,預設會呼叫物件的__eq__()方法。
以下**在python3.5下測試通過。
==比較操作符和is同一性運算子區別
==是python標準操作符中的比較操作符,用來比較判斷兩個物件的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和b變數的id不同, 所以b==a是true, b is a 是false.
**2:
>>> id(a)
4364243328
>>>>>> id(b)
4364202696
哪些情況下is和==結果是完全相同的?
**3:
>>> a = 256
>>> b = 256
>>> a is b
true
>>> a == b
true
>>>>>> a = 1000
>>> b = 10**3
>>> a == b
true
>>> a is b
false
>>>結論:數字型別不完全相同。
為什麼256時相同, 而1000時不同?
因為出於對效能的考慮,python內部做了很多的優化工作,對於整數物件,python把一些頻繁使用的整數物件快取起來,儲存到一個叫small_ints的連結串列中,在python的整個生命週期內,任何需要引用這些整數物件的地方,都不再重新建立新的物件,而是直接引用快取中的物件。python把這些可能頻繁使用的整數物件規定在範圍[-5, 256]之間的小物件放在small_ints中,但凡是需要用些小整數時,就從這裡面取,不再去臨時建立新的物件。
**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
結論:字串型別不完全相同。這個和直譯器實現有關。
**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 = #a和b為dict型別
>>> b =
>>> a is b
false
>>> a = set([1,2,3])#a和b為set型別
>>> b = set([1,2,3])
>>> a is b
false
結論當變數是數字、字串、元組,列表,字典時,is和==都不相同, 不能互換使用!當比較值時,要使用==,比較是否是同一個記憶體地址時應該使用is。當然,開發中比較值的情況比較多。
2樓:
is和==都是對物件進行比較判斷作用的,但對物件比較判斷的內容並不相同。下面來看看具體區別在哪?
is比較的是兩個物件的id值是否相等,也就是比較兩個物件是否為同一個例項物件,是否指向同一個記憶體地址。
==比較的是兩個物件的內容是否相等,預設會呼叫物件的__eq__()方法。python交流君羊(605018913)希望對你有所幫助
軟體測試中什麼是配置項測試?具體定義和具體工作是什麼
配置項測試的理解,我抄覺得得先清楚兩個概念 軟體配置項 我認為軟體配置項就是一個開發完成的,已經進入配置管理的,準備提供給客戶的產品。可以是可執行 也可以是產品文件。軟體需求規格說明書 軟體需求規格說明書是在專案前期進行需求分析的時候得到的一份文件,這份文件中描述了使用者的需求,是初始階段甲乙雙方對...
python中和的差別,python中v和f的區別
python 預設可用 代linux系統的路徑分隔符是 用 取代windows系統的路徑符。專 import os os.sep 的值即是指路徑分隔符。在檔案屬路徑中用os.sep 指令碼即可實現跨linux windows平臺。python中 v 和 f 的區別?回車符復 r 換行符 n 水平製表...
python中的list和array的不同之處
python沒有原生的array型別!python的list和c的陣列有什麼區別 python自己沒有array這個資料結構。據我所知array是python的numpy工具包定義的。python的list就是常說的列表。array和list主要的專不同是,因為numpy是一 屬個數值計算工具包,n...