详解Python中is和 == 的区别

  • 开门见山
  • is 和 == 之间如何选择?


开门见山

python 变量多属性 python变量的三个属性_pythonPython中的每个变量都有3个基本属性,即:变量标识(id)、变量类型(string, int, float等)和变量值,变量一旦创建,它的id值将不再改变
结论:
1. is 比较的是两个对象的id值是否一样;
2. == 比较的是两个变量的值是否相等。
python 变量多属性 python变量的三个属性_python下面将以可变数据类型为例来详细解析两种比较符的主要不同。
用一个字典类型来存储学生的基本信息,包括学校、班级、年龄,班上有个同学叫张三,因张三同学非常热爱学习,同学们又给他起了个外号叫小明,以后提到张三或者小明大家都知道这其实指的是同一个人,也即张三和小明指向的都是同一个变量(张三的个人学生信息),他的学生信息格式如下:

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

python 变量多属性 python变量的三个属性_python碰巧的是张三的同班同学李四和张三的年龄的一样大,那李四的学生信息也将存成如下形式,

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 和 == 之间如何选择?

python 变量多属性 python变量的三个属性_python 实际的开发过程中我们更多的关注的是变量的值,而非变量的id,此时应该使用 ”==“ 进行比较判断,如上例中判断张三和李四的个人信息是否完全一样;但在变量和单例值之间进行比较时,应该使用"is",最常用的是使用is来检查变量绑定的值是不是None;(注:Python中的None是一个单例对象,如果一个变量是None,则它一定和None指向同一个内存地址)。
  要完全理解上面这些还需要掌握Python中的可变和不可变数据类型,这个知识点将会在另一篇文章中进行讨论。
  以上这些希望能对你有所帮助!