python-"is" v.s. "=="
2016-12-26 15:44
417 查看
先说结论:“==”只是判断两个变量是否相等,“is”则判断两个变量是否是同一对象。
看例子:
这是为什么呢?再看看这四个变量的id:
可以看到
补充一句:判断一个实例是不是某对象的实例,可以使用
看例子:
>>> int_a = 1 >>> int_b = 1 >>> int_a == int_b True >>> int_a is int_b True >>> int_c = 10000 >>> int_d = 10000 >>> int_c == int_d True >>> int_c is int_d False
这是为什么呢?再看看这四个变量的id:
>>> id(int_a) 1908736464 >>> id(int_b) 1908736464 >>> id(int_c) 2471603994928 >>> id(int_d) 2471603994864
可以看到
int_a和
int_b的id是相同的,但是
int_c和
int_d是不同的,至于为什么id不同,就牵扯到在《 python-对象之hashable&unhashable与immutable&mutable》里面提到的“解释器在对值很小的int和很短的字符串的时候做了一点小优化,只分配了一个对象”。由此看出,”is”实际上比较的是id,可以理解为对象的地址,”==”比较的是值,就算两个变量存储位置不同,只要值相同,”==”就会返回True。所以说”is”比”==”更加严格,“==”只是表示这两个变量相等,“is”则表示这两个变量是同一个对象。
补充一句:判断一个实例是不是某对象的实例,可以使用
isinstance(instance_name, class_name)
相关文章推荐
- python 小知识点 "==" 与 "is"的区别
- Python3.5下安装Numpy报错“xxx.whl is not a valid wheel filename "
- Python中is与 "=="的区别
- Python安装scrapy提示 error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++
- Python使用eval强制转换字符串为字典时报错:File "<string>", line 1, in <module> NameError: name 'nan' is not defined
- python进程池multiprocessing.Pool运行错误:The "freeze_support()" line can be omitted if the program is not g
- Python学习之"is" 与 "==" 的区别详解
- python 状态机语句"Python is fun"褒贬义判断的两种实现方式
- Python PIL Image "image file is truncated"问题解决
- 【Python】安装python包时遇到"error: Microsoft Visual C++ 9.0 is required"的简答
- 【Python】安装python包时遇到"error: Microsoft Visual C++ 9.0 is required"问题的解决方法
- python 3-5 如何对迭代器做切片操作itertools.islice(open("test.txt"),0,10),迭代器消耗
- python robotframework用法及"wxpython not found"和“no browser is open”问题解决
- 关于Python踩坑,a = "//" 之后 a is "//" 语句是否为True?
- 【Python】python "TypeError: 'NoneType' object is not iterable"错误分析
- python使用问题 "The pandas.io.data module is moved to a separate package "
- Python学习——Python中的"is"与“==”
- Python中运算符"=="和"is"的差别分析
- 关于"RPC server is unavailable"的解决方案
- What the heck is "H5N1"?