2014-02-07 50 views
1

最近我看到這樣的代碼:困惑身份,是運營商

x = [2, 3, 4] 
if type(x) is list: 
    #some logic 

和感到困惑的if條件如何去了......我以爲is檢查內存身份和xid不同於listid,但如果情況如此,那麼if條件甚至會失效? (我的印象是,Python中唯一的本地單身人士是None)。

+0

它沒有檢查x的id。它檢查x的類型的id。 – M4rtini

+0

@ M4rtini我仍然從id(type(x))和id(type(list))得到不同的'id'值' –

+0

@EdgarAroutiounian'type(list)'是'type','type(x )'是'list',爲什麼會有ID相同? –

回答

2

這裏x是類list的一個實例,在新樣式類中type()返回實例本身的類,即在這種情況下爲list。考慮一個簡單的例子:

>>> class A(object): 
    pass 
... 
>>> type(A())   #calling type on the instance returns its class 
<class '__main__.A'> 
>>> type(A()) is A 
True 

注意,上面的例子不會爲用戶定義的老式類爲有instance類型的所有實例工作。

>>> class A: 
    pass 
... 
>>> type(A()) 
<type 'instance'>