Python中is和==(is not和!=)的区别

12人阅读 评论(0) 收藏 举报
分类:

Python中有很多种运算符,本文主要记录一下is==这两种运算符的区别:

id()函数是查看该对象所在内存地址。每个对象都有对应的内存地址,如:

>>> id(1)
1543816880
>>> id("abc")
2880674151480
>>> id([1, 2, 3])
2880703493384
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。类似于Java中的equal()和==。反之,is not 用于判断两个变量是否引用自不同的对象,而 != 用于判断引用变量的值是否不等。

下面来几个具体的例子:

  • 整数的比较:
x = 5
y = 5
print(x == y)
print(x is y)
print(id(x))
print(id(y))

执行结果:
True
True
1543817008
1543817008
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 字符串的比较:
x = "abc"
y = "abc"
print(x == y)
print(x is y)
print(id(x))
print(id(y))

执行结果:
True
True
2039623802136
2039623802136
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • list(列表)的比较:
x = [1, 2, 3]
y = [1, 2, 3]
print(x == y)
print(x is y)
print(id(x))
print(id(y))

执行结果:
True
False
2194144817928
2194144817288
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • tuple(元组)的比较:
x = (1, 2, 3)
y = (1, 2, 3)
print(x == y)
print(x is y)
print(id(x))
print(id(y))

执行结果:
True
False
2699216284336
2699216284480
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • dict(字典)的比较:
x = {"id": 1, "name": "Tom", "age": 18}
y = {"id": 1, "name": "Tom", "age": 18}
print(x == y)
print(x is y)
print(id(x))
print(id(y))

执行结果:
True
False
3005783112296
3005783112368
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • set(集合)的比较:
x = set([1, 2, 3])
y = set([1, 2, 3])
print(x == y)
print(x is y)
print(id(x))
print(id(y))

执行结果:
True
False
2206005855176
2206006414696
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 赋值后比较(符合所有数据类型),以list为例:
x = [1, 2, 3]
y = x
print(x == y)
print(x is y)
print(id(x))
print(id(y))

执行结果:
True
True
2539215778568
2539215778568 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

总结

在上面的例子中,我们分别打印了两种运算符的比较结果和内存地址,所以可以得出:

  • 只要各对象的值一样,则 x == y 的值一定为True;
  • 如果对象的类型为整数或字符串且值一样,则 x == y和 x is y 的值为True。(经测试浮点型数值,只有正浮点数符合这条规律,负浮点数不符合);
  • list,tuple,dict,set值一样的话,x is y 则为False;
  • x == y 与 x != y 的值相反,x is y 与 x is not y 的值相反。

以上结论只针对对变量直接赋值或变量相互赋值后的比较,不针对两个变量之间拷贝后在进行比较。

查看评论

python中&和and的区别

在python中:&指的是位运算,and指的是逻辑运算。所以在选择结构中表示与时用and.Python中的逻辑操作符为 and  or  not使用逻辑操作符可以将任意表达式连接在一起...
  • shirleycyy
  • shirleycyy
  • 2018-03-05 16:57:27
  • 207

python _、__和__xx__的区别

本文为译文,版权属于原作者,在此翻译为中文分享给大家。英文原文地址:Difference between _, __ and __xx__ in Python Python中不存在真正的私有...
  • yzl11
  • yzl11
  • 2016-12-21 22:36:17
  • 2130

python 中for 、if、 while的区别与比较

if应用举例: #if 若条件成立,只执行一次 #if 条件:如果条件成立,执行条件后的代码块内容,不成立,直接跳过代码块 #判断如果年龄age小于18,输出未成年 #=一个等号表示赋值的意思 ==双...
  • dayun555
  • dayun555
  • 2018-01-23 13:27:26
  • 542

Python中“xx+=xx”与“xx=xx+xx”的区别

Python中“+=”与“xx=xx+xx”的区别:
  • u014745194
  • u014745194
  • 2017-04-13 10:15:54
  • 336

python版本区别

  • 2012年10月08日 10:11
  • 41KB
  • 下载

Python里面search()和match()的区别?

match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话...
  • u011860731
  • u011860731
  • 2015-07-19 18:51:19
  • 2398

python中‘=+’与‘+=’的区别

’=+‘就是a=a+1这类的操作 ’+=‘就是a+=1这类的操作 是不是看起来一样?其实有点区别 先看一个例子:def add(p): print '进来时,p的id是',id(p) ...
  • jiruiYang
  • jiruiYang
  • 2016-11-03 11:38:11
  • 235

python基础--数组和矩阵区别

参考博客:http://blog.csdn.net/taoyanqi8932/article/details/52703686 在矩阵和数据中取行列值时,是不一样的表达形式,如下:1.矩阵和数组索引...
  • qq_26645205
  • qq_26645205
  • 2017-10-19 13:47:15
  • 444

Python list与数组的区别

list不是数组(额外安装Pynum) 1)可修改,list数据结构内容可以被程序修改 2)可动态增减,长度不固定 3)list里面的数据项可以是不同类型数据,也可以是list 4)两个lis...
  • u012988387
  • u012988387
  • 2015-04-09 23:06:53
  • 1199

Python之列表与元组的区别详解

相同点:都是序列类型回答它们的区别之前,先来说说两者有什么相同之处。list 与 tuple 都是序列类型的容器对象,可以存放任何类型的数据、支持切片、迭代等操作 foos = [0, 1, 2,...
  • qq_878799579
  • qq_878799579
  • 2017-06-08 08:45:14
  • 20513
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 81万+
    积分: 8195
    排名: 3110
    博客专栏
    最新评论