详解Python中is和 == 的区别
- 开门见山
- is 和 == 之间如何选择?
开门见山
Python中的每个变量都有3个基本属性,即:变量标识(id)、变量类型(string, int, float等)和变量值,变量一旦创建,它的id值将不再改变。
结论:
1. is 比较的是两个对象的id值是否一样;
2. == 比较的是两个变量的值是否相等。
下面将以可变数据类型为例来详细解析两种比较符的主要不同。
用一个字典类型来存储学生的基本信息,包括学校、班级、年龄,班上有个同学叫张三,因张三同学非常热爱学习,同学们又给他起了个外号叫小明,以后提到张三或者小明大家都知道这其实指的是同一个人,也即张三和小明指向的都是同一个变量(张三的个人学生信息),他的学生信息格式如下:
zhangsan = {'school':'蓝翔', 'class':'高二3班', 'age':18}
xiaoming = zhangsan
// 打印二者的id值
print('zhangsan_id:',id(zhangsan))
print('xiaoming_id:'id(xiaoming))
// 通过运行结果可以看出,二者的id值是一样的
zhangsan_id: 2633616940704
xiaoming_id: 2633616940704
碰巧的是张三的同班同学李四和张三的年龄的一样大,那李四的学生信息也将存成如下形式,
zhangsan = {'school':'蓝翔', 'class':'高二3班', 'age':18}
xiaoming = zhangsan
lisi = {'school':'蓝翔', 'class':'高二3班', 'age':18}
//打印李四的id值
print('lisi_id:', id(lisi))
// 运行结果如下
lisi_id: 2613618695912
将张三和李四学生信息用is和==进行比较,
print(zhangsan is lisi)
print(zhangsan == lisi)
// 运行结果
False
True
is 和 == 之间如何选择?
实际的开发过程中我们更多的关注的是变量的值,而非变量的id,此时应该使用 ”==“ 进行比较判断,如上例中判断张三和李四的个人信息是否完全一样;但在变量和单例值之间进行比较时,应该使用"is",最常用的是使用is来检查变量绑定的值是不是None;(注:Python中的None是一个单例对象,如果一个变量是None,则它一定和None指向同一个内存地址)。
要完全理解上面这些还需要掌握Python中的可变和不可变数据类型,这个知识点将会在另一篇文章中进行讨论。
以上这些希望能对你有所帮助!