is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。
Python中,万物皆对象 每个对象包含3个属性,id,type,value
id就是对象地址,可以通过内置函数id()查看对象引用的地址。
type就是对象类型,可以通过内置函数type()查看对象的类型。
value就是对象的值。
a is b 相当于 id(a)==id(b)
is 比较的是id是不是一样,== 比较的是值是不是一样。
Python会对比较小的整数对象[-5,256]进行缓存,下次用的时候直接从缓存中获取,所以is 和 == 的结果可能相同
另外,但凡是不可变对象,在同一个代码块中的对象,只有是值相同的对象,就不会重复创建,而是直接引用已经存在的对象。
大多数情况下,当用is和==的结果是一样时,用is的效率是会高于==的效率。