python中is 与 ==的区别
is判断两个对象id是否相等,即判断是否是同一个对象
类本身也是一个对象,而且全局唯一
==判断两个对象的值是否相同
当使用==判断两个序列对象是否相等时,会调用序列对象中的__eq__魔法函数,从而判断序列对象中的值是否相等
a = [1,2,3,4] b = [1,2,3,4] print(id(a),id(b)) print(a is b) print(isinstance(a, list)) print(a == b) ''' 92235456 92156992 False True True ''' class People: pass person = People() if type(person) is People: print ("yes") if isinstance(person,People): print("true") ''' yes true '''
附录:
python intern机制:将一定范围内的小整数以及小段字符串,建立一个全局唯一的对象,下次再使用相同的小整数或小段字符串时,就会直接指向这个全局唯一的对象,不会再生成一个新的对象
a = 1 b = 1 print(id(a),id(b)) print(a is b) ''' 268421248 268421248 True ''' a = "abc" b = "abc" print(id(a),id(b)) print(a is b) ''' 10281984 10281984 True '''