python每日一帖---難懂的現象+清楚的解釋---我們都一樣

▶ 在深處,我們都一樣 *

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章