2012-04-18 34 views

回答

9
>>> a = [[]] 
>>> b = [] 
>>> b in a 
True 
>>> b is a[0] 
False 

這證明它是一個值檢查(至少默認),而不是身份檢查。請記住,如果需要,班級可以重寫__contains__()以使其成爲身份檢查。但是,默認情況下,沒有。

+0

這是完美的謝謝你! – 2012-04-18 18:56:59

1

它取決於班級如何做檢查。對於內建list,它使用==運算符;否則你不能安全地使用'something' in somelist

更具體地說,它檢查項目是否等於列表中的項目 - 因此在內部它最有可能是hash(a) == hash(b)比較;如果哈希值相等,則對象本身也可能被比較。

+1

它不會只是一個哈希檢查 - 如果沒有值相等,哈希值可以相等。 – 2012-04-18 13:25:14

+0

謝謝你們,這是非常有用的信息! – 2012-04-18 18:56:32

+0

這是錯誤的。我只是定義了一個'__eq__'方法,它已被(無意識地)由'__contains__'或'in'拾取。因此,很可能'list'實現了'a .__ eq __(b)'比較。 – Atcold 2018-02-13 17:27:16