python中==和is的区别

Python中的对象包含三要素:id、type、value, 其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值。
is判断的是a对象是否就是b对象,是通过id来判断的;==判断的是a对象的值是否和b对象的值相等,是通过value来判断的。
如下代码或许可以帮助我们理解。
>>> a = 1
>>> b = 1.0
>>> a is b
False
>>> a == b
True
>>> id(a)
12777000
>>> id(b)
14986000
>>> a = 1
>>> b = 1
>>> a is b
True
>>> a == b
True
>>> id(a)
12777000
>>> id(b)
12777000
整形对象和字符串对象是不可变对象,所以python会很高效的缓存他们。python仅缓存简单整形,因为它认为在python应用程序中这些小整形会被经常使用,python的缓存范围是(-1, 100),不过这个值是会改变的,请不要使用这个特性。
在对值比较的时候尽量使用"=="或者是cmp()函数。

python中==和is的区别

时间: 2024-10-01 07:05:09

python中==和is的区别的相关文章

python中is和==的区别

Python中  is 和 == 的区别的笔记 在 Python 中一切都是对象,毫无例外整数也是对象,对象之间比较是否相等可以用==,也可以用is.==和is操作的区别是: is比较的是两个对象的id值是否相等,也就是比较俩对象是否为同一个实例对象,是否指向同一个内存地址. ==比较的是两个对象的内容是否相等,默认会调用对象的__eq__()方法. 清楚is和==的区别之后,对此也许你有可能会遇到下面的这些困惑,于是就有了这样一篇文章,试图把Python中一些隐晦的东西趴出来,希望对你有一定的

Python中classmethod与staticmethod区别

classmethod:类方法staticmethod:静态方法 在python中,静态方法和类方法都是可以通过类对象和类对象实例访问.但是区别是: @classmethod 是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的则叫做实例方法. 类方法的第一个参数cls,而实例方法的第一个参数是self,表示该类的一个实例. 普通对象方法至少需要一个self参数,代表类对象实例 类方法有类变量cls传入,从而可以用cls做一些相关的处理.并且有子类继承时,调用该类方法时,传入的类变

Python中__repr__和__str__区别

如下: Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 18:11:49) Type "help", "copyright", "credits" or "license" for >>> class Test(object): ... def __init__(self, value='hello, world!'): ... self.data = value ...

Python中__repr__和__str__区别(转)

class Test(object): def __init__(self, value='hello, world!'): self.data = value >>> t = Test() >>> t <__main__.Test at 0x7fa91c307190> >>> print t <__main__.Test object at 0x7fa91c307190> # 看到了么?上面打印类对象并不是很友好,显示的是对象

python 中一些关键字的区别

一.raw_input 和input input和raw_input都可以读取控制台的输入,但是input和raw_input在处理数字时是有区别的 1.当输入为纯数字时 input返回的是数值类型,如int,float raw_inpout返回的是字符串类型,string类型 2.当输入为字符串表达式时 input会计算在字符串中的数字表达式,而raw_input不会. 比如输入 “57 + 3”: input会得到整数60 raw_input会得到字符串”57 + 3” 比如输入 “5,4,

python中break与continue区别

1.在其他语言中break与continue也被经常使用到,其中用法稍微有些去别,下面我们使用python的语法结构来看看是否和在其他语言中的使用方法一致. continue:是跳出本次循环,进入到下一次循环中: break:是直接跳出循环,终止执行: break举例代码如下: names = ['marry','lily','lilei']for name in names: if name == 'lily': break print(name)else: print('猜名字游戏结束')

python中函数和方法区别,以及如何给python类动态绑定方法和属性(涉及types.MethodType()和__slots__)

网上有很多同义但不同方式的说法,下面的这个说法比较让你容易理解和接受 1 与类和实例无绑定关系的function都属于函数(function): 2 与类和实例有绑定关系的function都属于方法(method). “与类和实例无绑定关系”就道出了其中的关键 我们知道python是动态的编程语言,python的类除了可以预先定义好外,还可以在执行过程中,动态地将函数绑定到类上,绑定成功后,那些函数就变成类的方法了. 定义User类 可以使用__slots__来限制绑定的属性和方法 1 user

python中__getattr__和__getattribute__区别

重载__getattr__方法对类及其实例未定义的属性有效.如果访问的属性存在,就不会调用__getattr__方法.这个属性的存在,包括类属性和实例属性 class ClassA: x = 'a' def __init__(self): self.y = 'b' def __getattr__(self, item): return '__getattr__' if __name__ == '__main__': a = ClassA() print(a.x)# 输出结果 a # 使用实例直接

python中_, __, __foo__区别及使用场景

单下划线 1.带有单下划线的特性不会被 from module import *导入. 2.单下划线是Python程序员使用类时的约定,表明程序员不希望类的用户直接访问属性.仅仅是一种约定!实际上,实例._变量,可以被访问. 双下划线 1.防止被子类覆盖. 前后双下划线 供python内部使用,如__init__ new str 等. 原文地址:https://www.cnblogs.com/sixloop/p/python_abc.html