本文引用自霍格沃兹测试开发学社录播课
经典面试题 - 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 和 == 有什么区别
-
is
是比较两个对象的内存地址是否相等,==
是比较两个对象的内容是否相等。id()
方法可以查看对象的内存地址 - 关于小整形对象[-5,256]范围内的对象,在全局解释器范围内会被重复使用,永远不会被GC回收: