Python中is和==的具体解释
来源:互联网 发布:美工学习 编辑:程序博客网 时间:2024/05/23 01:17
变量的比较方法
python中两个变量比较,应该有三种方法:
1. 值比较,就是比较变量引用的对象中的数据是否相同
2. 身份比较,就是判断两个变量是否引用的是同一对象,指向的内存地址是否相同
3. 类型比较,就是比较两个变量的类型是否相同
is的解释
在python语言中is是判断内存地址是否一致的。可以这样理解,在Python中,一切都是对象,每个对象都有一个身份,一个类型和一个值。这个身份就是内存中的地址(可以使用id()这个函数查看变量引用的对象的内存地址)。类型是指,这个变量引用的数据类型,包括一些自定义类型。这个值,就是变量引用的对象的具体数值,或者是字符串的内容等。
python使用is进行变量的身份比较,就是通过比较内存地址来判断是否引用的是同一个内存对象。
==的解释
==在python中就是进行值比较的,判断两个对象的值是否相同。但是如果比较的两个对象的值的话,最好是相同对象类型。否则比较则全部为False。
总结
有且当仅比较的两个变量指向同一个对象时 “is” 才返回 True,而 “==” 是说明指向同一个对象的两个变量的值是相等的。
所以,当”is” 返回为True时,”==”一定返回的是True,但是”==”返回的值为True,但是”is”不一定返回的是True。
也就是说,如果两个变量,他们的的引用对象即id是相同的,那他们的值就是相同的,如果两个变量的字面量是是相同的但是并不代表这两个变量id是相同的。
一些其他问题
这种问题可能是由于python内存机制引起的,Python2.7.13源码,/Objects/longobject.c中第26行说明了小整数是预先分配好以便共享,应该是为了效率考虑,在31行创建了一个small_ints的数组,37行的函数就是获取小整数引用的代码。小整数的范围在[-5, 257),所以对于小整数来说,id(number)是相同的,因为都是引用的同一块内存,同一个PyObject*,大于等于257的PyObject是通过_PyLong_New分配的,所以自然引用的不是同一块内存。
关于python对象引用
- python中变量和数据是分开存放的。
- python将所有数据存为内存对象,变量事实上是指内存对象的引用。”=”用于将变量名和内存中的某个对象绑定,如果对象事先存在,则进行绑定,否则,”=”会直接创建引用的对象。
- 动态类型,在任何时刻,只要需要某个对象引用,都可以重新引用一个不同的对象(可以是不同数据类型)。
注意:变量名没有类型,对象才有。
- Python中is和==的具体解释
- python中open打开模式具体解释
- PHP中try{}和catch{}的具体用法详细解释
- Python中is和==的区别和联系
- Python中is和==的区别
- Python中is和==的区别
- python 中is和= = 的比较
- python中 is 和 == 的区别
- Python 中判断相等的 is 和 ==
- python中is和==的异同
- 在python 中is和= = 的区别
- 在python 中is和= = 的区别
- python中is和 == 的区别
- Python中is和==的区别
- [基础] - Python中 is 和 == 的区别
- Python判断语句中‘is’和‘==’的区别
- Python中is和==的区别
- Python中==和is的区别
- 网络框架okHttp源码分析
- HDU 4436 str2int
- TypeScript入门知识三(表达式和循环)
- Dialog 使用方法详解
- 排序算法小结
- Python中is和==的具体解释
- Roads in the North POJ
- hdoj 5974 A Simple Math Problem
- SVN的安装与常用功能使用以及解决安装配置过程中的一些错误
- 自定义加载 PopupWindow
- Java面试笔试指南(三)---关键字
- 优化
- Tarjan算法 计算有向图的强连通量(可作为模板)-------CCF CSP 高速公路
- memset函数详解