▶ 在深處,我們都一樣 *
class WTF:
pass
Output:
>>> WTF() == WTF() # 兩個不同的對象不相等
False
>>> WTF() is WTF() # id一樣不相等
False
>>> hash(WTF()) == hash(WTF()) # 哈希值也“應該”不相等
True
>>> id(WTF()) == id(WTF())
True
解釋:
- 當使用
id
函數時,Python 建立一個名爲WTF
的對象並把它傳入id
函數.id
函數拿到它的id
(它的內存位置), 然後丟棄這個對象。 - 當我們在交互器中做這些時,如果Python發現一個對象佔用了未丟棄的在用的內存位置,Python就會給這個對象一個新位置。
-
不過爲什麼用
is
比較結果是False
呢? 讓我們來看看。class WTF(object): def __init__(self): print("I") # 創建時觸發 def __del__(self): print("D") #丟棄時觸發
輸出:
>>> WTF() is WTF() I # 創建1 I # 創建2,比較,內存位置不同,返回false D # 刪除1 D # 刪除2 False >>> id(WTF()) == id(WTF()) I #創建1 D #記住內存,連同內存一起刪掉 I #創建2,它用了1的內存(因爲1已經刪掉),比較,兩個內存相同。 D #刪除2 True