视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Python中is和==的详细解析(附代码)
2020-11-27 14:20:22 责编:小采
文档


本篇文章给大家带来的内容是关于Python中is 和 ==的详细解析(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

在Python中一切都是对象。

Python中对象包含的三个基本要素,分别是:

  • id(身份标识)
  • type(数据类型)
  • value(值)
  • 对象之间比较是否相等可以用 == ,也可以用 is 。

    is 和 == 都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。下面来看看具体区别在哪?

    is 比较的是两个对象的id值是否相等,也就是比较两个对象是否为同一个实例对象,是否指向同一个内存地址。

    == 比较的是两个对象的内容是否相等,默认会调用对象的 __eq__ 方法。

    == 是python标准操作符中的比较操作符,用来比较判断两个对象的值是否相等。

    先来看一个例子

    >>> a = [1, 2, 3]
    >>> b = a
    >>> b is a 
    True
    >>> b == a
    True
    >>> b = a[:]
    >>> b is a
    False
    >>> b == a
    True

    is 也被叫做同一性运算符,也就是id是否相同。

    看下面代码, a和b变量的id不同, 所以 b == a 是True, b is a 是False.

    再来看一下他们的id:

    >>> id(a)
    43243328
    >>> 
    >>> id(b)
    43202696

    哪些情况下 is 和 == 结果是完全相同的?

    >>> a = 256
    >>> b = 256
    >>> a is b
    True
    >>> a == b
    True
    >>> a = 1000
    >>> b = 10**3
    >>> a == b
    True
    >>> a is b
    False
    >>>

    所以数字类型不完全相同。

    那为什么256时相同, 而1000时不同呢?

    因为出于对性能的考虑,Python内部做了很多的优化工作,对于整数对象,Python把一些频繁使用的整数对象缓存起来,保存到一个叫 small_ints 的链表中,在Python的整个生命周期内,任何需要引用这些整数对象的地方,都不再重新创建新的对象,而是直接引用缓存中的对象。

    Python把这些可能频繁使用的整数对象规定在范围 [-5, 256] 之间的小对象放在 small_ints 中,但凡是需要用些小整数时,就从这里面取,不再去临时创建新的对象。

    >>> c = 'miracle.young'
    >>> d = 'miracle.young'
    >>> c is d
    False
    >>> c == d
    True
    >>> c = 'miracleyoung'
    >>> d = 'miracleyoung'
    >>> c is c
    True
    >>> c == d
    True

    所以字符串类型不完全相同,这个和解释器实现有关。

    >>> a = (1,2,3) # a和b为元组类型
    >>> b = (1,2,3)
    >>> a is b
    False
    >>> a = [1,2,3] # a和b为list类型
    >>> b = [1,2,3]
    >>> a is b
    False
    >>> a = {'miracle':100,'young':1} # a和b为dict类型
    >>> b = {'miracle':100,'young':1}
    >>> a is b
    False
    >>> a = set([1,2,3]) # a和b为set类型
    >>> b = set([1,2,3])
    >>> a is b
    False

    所以当变量是数字、字符串、元组,列表,字典时,is 和 == 都不相同, 不能互换使用!当比较值时,要使用 ==,比较是否是同一个内存地址时应该使用is。
    当然,开发中比较值的情况比较多。

    本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的python教程视频栏目!

    下载本文
    显示全文
    专题