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
'''
原文地址:https://www.cnblogs.com/xyz2b/p/10524998.html