? 在深处, 我们都一样 * 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
来源: http://www.bubuko.com/infodetail-2751739.html