Python 的 “==” 和 “is”区别用法介绍

Python中比较两个对象是否相等,一共有两种方法,简单来说,它们的区别如下:

is 是比较两个引用是否指向了同一个对象(引用比较)。
== 是比较两个对象是否相等。
>>> a = [1, 2, 3]
>>> b = a
>>> b is a # a的引用复制给b,他们在内存中其实是指向了用一个对象
True
>>> b == a # 当然,他们的值也是相等的
True
>>> b = a[:] # b通过a切片获得a的部分,这里的切片操作重新分配了对象,
>>> b is a # 所以指向的不是同一个对象了
False
>>> b == a # 但他们的值还是相等的
True
实现原理

is 比较的是两者是否是同一个对象,所以比较的是内存地址(id是否相同)。

== 是值比较。不可变对象,例如int,str,它会直接进行值比较。对于Python已知的对象,会调用他们的 __eq__ 函数来比较。(其实已知的对象应该也是通过内置的 __eq__ 函数来比较的)。对于自定义的对象,如果实现了 __eq__ 函数,就会使用它比较,如果没有实现,效果和 == 是一样的。

对象缓存机制

Python会对比较小的对象缓存,下次用到比较小的对象时,会去缓存区查找,如果找到,不会再开辟新的内存,而是继续把小对象的地址赋给新的值。例子:

>>> c = 1
>>> d = 1
>>> print(c is d)
True
 
>>> 1000 is 10**3
False
>>> 1000 == 10**3
True
通过计算得到的赋值,不会使用缓存区。从第一个代码示例中可以看出。

对于字符串,你可以通过使用 intern 函数强制使用缓存区。

时间: 2024-09-28 09:36:10

Python 的 “==” 和 “is”区别用法介绍的相关文章

Python中的with...as用法介绍

  这篇文章主要介绍了Python中的with...as用法介绍,本文直接给出用法实例,需要的朋友可以参考下 这个语法是用来代替传统的try...finally语法的. 代码如下: with EXPRESSION [ as VARIABLE] WITH-BLOCK 基本思想是with所求值的对象必须有一个__enter__()方法,一个__exit__()方法. 紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量.当with后面的

Python中的装饰器用法详解

来源:http://www.jb51.net/article/59867.htm 来源:http://blog.csdn.net/mdl13412/article/details/22608283 这篇文章主要介绍了Python中的装饰器用法,以实例形式详细的分析了Python中的装饰器的使用技巧及相关注意事项,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了Python中的装饰器用法.分享给大家供大家参考.具体分析如下: 这里还是先由stackoverflow上面的一个问题引起吧,如

python正则表达式match和search用法实例

 这篇文章主要介绍了python正则表达式match和search用法,实例分析了正则表达式中match和search的功能.定义及相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了python正则表达式match和search用法.分享给大家供大家参考.具体分析如下: python提供了2中主要的正则表达式操作:re.match 和 re.search. match :只从字符串的开始与正则表达式匹配,匹配成功返回matchobject,否则返回none: sea

python中引用与复制用法实例分析

  本文实例讲述了python中引用与复制用法.分享给大家供大家参考.具体分析如下: 在python中,任何不可变对象是传值的,而可变对象是传引用的. 不管是向函数传递参数或者是任何形式的对象复制来说,不可变对象(比如整数,字符串)被真正复制,而可变对象只是复制了一个对他们的引用,即在内存中只有一份对象,而引用两份. a=b 这样的赋值,就会创建对b的引用,对于象数字和字符串这样的不可变的对象,这种赋值实际是创建了b的一个副本 ? 1 2 3 4 5 6 7 8 9 10 11 >>>

python关键字and和or用法实例

  这篇文章主要介绍了python关键字and和or用法实例,本文直接给出实现代码,需要的朋友可以参考下 python 中的and从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值. or也是从左到有计算表达式,返回第一个为真的值. 代码如下: IDLE 1.2.4 >>>'a'and'b' 'b' >>>''and'b' '' >>>'a'or'b' 'a' >>>''or'b' 'b' 类似三目表达式的

详解Python中break语句的用法

  这篇文章主要介绍了详解Python中break语句的用法,是Python入门的呼出知识,需要的朋友可以参考下 在Python中的break语句终止当前循环,继续执行下一个语句,就像C语言中的break一样. break最常见的用途是当一些外部条件被触发,需要从一个循环中断退出. break语句可以在while和for循环使用. 如果正在使用嵌套循环(即一个循环里内嵌另一个循环),break语句可以用于停止最内层循环的执行,并执行外循环的下一行代码的程序. 语法 在Python中break语句

Python中Continue语句的用法的举例详解

  这篇文章主要介绍了Python中Continue语句的用法的举例详解,是Python入门中的基础知识,需要的朋友可以参考下 Python continue语句返回while循环的开始.Continue语句拒绝在该循环的当前迭代中的其余语句执行并移动控制返回到循环的顶部(开始位置). continue语句可以在while和for循环使用. 语法 Python continue语句的语法如下: continue 流程图: 例子 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14

python中while循环语句用法

  这篇文章主要介绍了python中while循环语句用法,以一个简单实例形式分析了Python使用while循环语句使用方法,需要的朋友可以参考下 ? 1 2 3 4 number = 1 while number < 20: print(number) number += 1 运行结果如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 希望本

Python中的装饰器用法详解_python

本文实例讲述了Python中的装饰器用法.分享给大家供大家参考.具体分析如下: 这里还是先由stackoverflow上面的一个问题引起吧,如果使用如下的代码: 复制代码 代码如下: @makebold @makeitalic def say():    return "Hello" 打印出如下的输出: <b><i>Hello<i></b> 你会怎么做?最后给出的答案是: 复制代码 代码如下: def makebold(fn):