• 【Python中is和==的区别】


    🤵‍♂️ 个人主页@老虎也淘气 个人主页
    ✍🏻作者简介:Python学习
    🐋 希望大家多多支持我们一起进步!😄
    如果文章对你有帮助的话,
    欢迎评论 💬点赞👍🏻 收藏 📂加关注

    前言:

    Python编程的世界里,我们经常会遇到许多独特的语法和概念。其中一个引发混淆的问题就是"“和"is"之间的区别。这两个看似相似的操作符实际上有着截然不同的用途和行为。深入理解它们的差异,将为你在编写Python代码时提供更清晰的思路,避免一些难以发现的错误。本文将深入研究”==“和"is”,揭示它们的背后原理,以及在实际编码中如何明智地选择使用它们。

    在Python中一切都是对象。
    Python中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)。对象之间比较是否相等可以用==,也可以用is。
    is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。下面来看看具体区别在哪?
    is比较的是两个对象的id值是否相等,也就是比较两个对象是否为同一个实例对象,是否指向同一个内存地址。
    ==比较的是两个对象的内容是否相等,默认会调用对象的__eq__()方法。

    以下代码在Python3.5下测试通过。
    ==比较操作符和is同一性运算符区别

    ==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等。
    代码1:
    
    • 1
    • 2
    >>> a = [1, 2, 3]
    >>> b = a
    >>> b is a 
    True
    >>> b == a
    True
    >>> b = a[:]
    >>> b is a
    False
    >>> b == a
    True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    解释一下为什么?is也被叫做同一性运算符,也就是id是否相同。看下面代码, a和b变量的id不同, 所以b==a是True, b is a 是False.

    代码2:

    >>> id(a)
    4364243328
    >>> 
    >>> id(b)
    4364202696
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    >>> a = 256
    >>> b = 256
    >>> a is b
    True
    >>> a == b
    True
    >>>
    >>> a = 1000
    >>> b = 10**3
    >>> a == b
    True
    >>> a is b
    False
    >>>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    结论:数字类型不完全相同。

    为什么256时相同, 而1000时不同?
    因为出于对性能的考虑,Python内部做了很多的优化工作,对于整数对象,Python把一些频繁使用的整数对象缓存起来,保存到一个叫small_ints的链表中,在Python的整个生命周期内,任何需要引用这些整数对象的地方,都不再重新创建新的对象,而是直接引用缓存中的对象。Python把这些可能频繁使用的整数对象规定在范围[-5, 256]之间的小对象放在small_ints中,但凡是需要用些小整数时,就从这里面取,不再去临时创建新的对象。
    
    代码4:
    
    • 1
    • 2
    • 3
    • 4
    >>> c = 'pythontab.com'
    >>> d = 'pythontab.com'
    >>> c is d
    False
    >>> c == d
    True
    >>> c = 'pythontabcom'
    >>> d = 'pythontabcom'
    >>> c is c
    True
    >>> c == d
    True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    结论:字符串类型不完全相同。这个和解释器实现有关。

    代码5:

    >>> 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 = {'python':100,'com':1} #a和b为dict类型
    >>> b = {'python':100,'com':1}
    >>> a is b
    False
    >>> a = set([1,2,3])#a和b为set类型
    >>> b = set([1,2,3])
    >>> a is b
    False
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    结论

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

    性能考虑:

    在性能方面,理解"====“和"is"之间的差异对于编写高效的代码至关重要。”"是值比较操作符,用于检查两个对象是否具有相同的值。相比之下,"is"是身份比较操作符,用于检查两个对象是否是同一个对象,即它们的身份是否相同。

    在一些场景中,特别是处理大规模数据集或在循环中执行频繁比较的情况下,“is"可能比”“更高效。这是因为”“通常需要比较对象的值,而"is"只需比较对象的身份,避免了额外的数值比较操作。然而,需要注意的是,在一般情况下,Python解释器会对”=="进行一些优化,使得其性能足够高效。因此,在实际编码中,应该根据具体情况权衡使用这两个操作符,而不是盲目选择其中一个。

    代码规范和最佳实践:

    在Python社区中,有一套广泛接受的代码规范和最佳实践,它们有助于提高代码的可读性和一致性。对于"“和"is"的使用,社区通常建议在比较变量的值时使用”==“,而在比较对象的身份时使用"is”。这是因为""更关注对象的值是否相等,而"is"更关注对象是否是同一个实例。

    例如,对于整数和字符串等不可变对象,使用"==“是安全的,因为它们的值相同时它们的身份也是相同的。然而,在比较可变对象时,尤其是自定义对象时,最好使用"is”,以确保比较的是对象的身份而不仅仅是值。

    在编写代码时,遵循这些约定有助于提高代码的一致性,并使代码更容易阅读和维护。在团队协作中,共同的代码规范是确保项目整体代码质量的重要一环。

    结尾:

    在Python的广袤世界里,每一个细微的差异都可能对你的代码产生深远的影响。"“和"is"的区别或许看似微小,但正是这种微小的差异,能够在你的程序中引发意想不到的结果。通过本文的探讨,相信你已经对这两者的区别有了更清晰的认识。在未来的编码旅程中,正确而明智地选择”==“或者"is”,将助你避免许多潜在的错误,使你的代码更加健壮和可维护。无论是初学者还是有经验的开发者,深入理解这一细微但重要的区别,都将使你在Python的舞台上更加娴熟自如。

  • 相关阅读:
    大龄码农的业余作品:升讯威在线客服系统:系统架构设计
    Spring的注解开发-Spring配置其它注解
    ppt背景图片怎么设置?6步教你快速搞定!
    python知识:装饰器@property有啥用途?
    微信小程序隐私协议相关接口实际使用方式
    pytorch_quantization安装
    零零信安-D&D数据泄露报警日报【第31期】
    NIO Selector选择器解析
    数据治理-度量指标
    laravel8配合jwt
  • 原文地址:https://blog.csdn.net/m0_66106755/article/details/127810494