经典面试题-is与==区别

本文引用自霍格沃兹测试开发学社录播课

经典面试题 - is 与 == 的区别

霍格沃兹测试开发学社
http://ceshiren.com

问题

面试官问:说一下在 python 中判断两个对象相等 is 和 == 有什么区别

考察点分析

面试官主要的目的:

  • 在 python 中有没有用过 is 和==
  • 当使用 is 与 == 比较两个对象的时候,是否思考过这俩在用法上有什么区别?

技术点

这个问题涉及到的技术点:

  • is 是比较两个对象的内存地址是否相等
  • == 是比较两个对象的内容是否相等
  • id() 方法可以查看对象的内存地址

示例 - 数字比较

  • 数字
>>> a=1000
>>> b=1000
>>> a is b
False
>>> a==b
True

示例 - 字符串比较

  • 字符串
>>> str1="hogwarts!"
>>> str2="hogwarts!"
>>> str1 is str2
False
>>> str1 == str2
True

示例 - 序列类型

  • 字典/列表/元组,内容相同的情况下,地址不一致
# 字典类型比较
>>> dic1 = {"name":"lili", "phone":"13012345678"}
>>> dic2 = {"name":"lili", "phone":"13012345678"}
>>> dic1 == dic2
True
>>> dic1 is dic2
False
# 列表类型比较
>>> list1=[1,2,3]
>>> list2=[1,2,3]
>>> list1 == list2
True
>>> list1 is list2
False
# 元组类型比较
>>> tuple1=(1,2,3)
>>> tuple2=(1,2,3)
>>> tuple1 == tuple2
True
>>> tuple1 is tuple2
False

扩展

  • 小整数对象[-5,256],在全局解释器范围内会被重复使用,永远不会被 GC 回收

总结

问题:说一下在 python 中判断两个对象相等 is 和 == 有什么区别

  1. is 是比较两个对象的内存地址是否相等,== 是比较两个对象的内容是否相等。id() 方法可以查看对象的内存地址
  2. 关于小整形对象[-5,256]范围内的对象,在全局解释器范围内会被重复使用,永远不会被GC回收: