App下载
3. 我们都一样
一本正经的Python课程 / 3. 我们都一样
手机也能上课
App下载
1/2

我们都一样

示例:

class MyClass:
  pass

执行和输出:

>>> MyClass() == MyClass() # 两个不同的对象应该不相等
False
>>> MyClass() is MyClass() # 也不相同
False
>>> hash(MyClass()) == hash(MyClass()) # 哈希值也应该不同
True
>>> id(MyClass()) == id(MyClass())
True

说明:

  • 当调用 id 函数时, Python 创建了一个 WTF 类的对象并传给 id 函数. 然后 id 函数获取其id值 (也就是内存地址), 然后丢弃该对象. 该对象就被销毁了.
  • 当我们连续两次进行这个操作时, Python会将相同的内存地址分配给第二个对象. 因为 (在CPython中) id 函数使用对象的内存地址作为对象的id值, 所以两个对象的id值是相同的.

综上, 对象的id值仅仅在对象的生命周期内唯一. 在对象被销毁之后, 或被创建之前, 其他对象可以具有相同的id值.


那为什么 is 操作的结果为 False 呢? 

让我们看看这段代码.

class MyClass(object):
def __init__(self): print("I") def __del__(self): print("D")

执行:

>>> MyClass() is MyClass()
I I D D False >>> id(MyClass()) == id(MyClass())
I D I D True

正如你所看到的, 对象销毁的顺序是造成所有不同之处的原因。


+10 经验 +10积分
解析
提示
参考答案
+10 经验 +10积分
视频播放结束,是否学习下一节?