Python基础:详解 a == b 和 a is b 的问题

python学习网 2020-08-15 08:27:01

首先我们要了解对于Python对象而言,一般存在三个属性:type 类型, value 值 以及 地址id

    • 1 a == b , 这是一个比较运算符,用于比较两个对象的value(值)是否相同
      相同则返回True 否则返回False
      示例:
      # 以下用于示例 a == b 用法
      >>> a = 1     # a, b 数值类型
      >>> b = 1
      >>> a == b
      True
      >>> a = 'zhaoxuan'    # a,b 字符串类型
      >>> b = 'zhaoxuan'
      >>> a == b
      True
      >>> a = [1, 2]        # a,b 列表类型
      >>> b = [1, 2]
      >>> a == b
      True
      
      >>> a = 1     # a, b 数值类型
      >>> b = 2
      >>> a == b
      False
      >>> a = 'hello'    # a,b 字符串类型
      >>> b = 'world'
      >>> a == b
      False
      >>> a = [1, 2]    # a,b 列表类型
      >>> b = [1, 3]
      >>> a == b
      False

      2 a is b , 这是一个同一性运算符。用于比较两个对象的物理id。如果相同则返回True
      否则返回False
      示例:

      # 以下用于示意 a is b 用法:
      >>> a = -5        # a, b 数值类型
      >>> b = -5
      >>> a is b
      True
      >>> a = -6
      >>> b = -6
      >>> a is b
      False        # 下面讲解
      >>> a = 256
      >>> b = 256
      >>> a is b
      True
      >>> a = 257
      >>> b = 257
      >>> a is b
      False    # 下面讲解
      
      >>> b = 'zhaoxuan'    # a, b 字符串类型
      >>> a = 'zhaoxuan'
      >>> a is b
      True        # 简单字符串可用,下面讲解
      >>> id(a)
      42111997
      >>> id(b)
      42111997
      >>> a = 'wo shi zhao xuan'
      >>> b = 'wo shi zhao xuan'
      >>> a is b
      False    # 复杂字符串不可用,下面讲解
      >>> id(a)
      2146074255200
      >>> id(b)
      2146074255272
      
      >>> a = (1,2,3)         # a, b 元组类型
      >>> b = (1,2,3)
      >>> a is b
      False
      >>> id(a)
      2146074256320
      >>> id(b)
      2146074256378
      
      >>> a = [1,2,3]      #a,b list类型
      >>> b = [1,2,3]
      >>> a is b
      False
      
      >>> a = {'a':1,'b':2}     #a,b dict类型
      >>> b = {'a':1,'b':2}
      >>> a is b
      False
      
      >>> a = set([1,2,3])        #a,b set类型
      >>> b = set([1,2,3])
      >>> a is b
      False
      >>> id(a)
      2146074299258
      >>> id(b)
      2146074299236
    • 综上:

      • 1 数值相同时 a == b 返回True,否则返回False
      • 2 数值相同时 a is b 未必返回True
    • 总结:

      • Python为了优化效率,内置了小整数对象池和简单字符串对象池。
        小整数对象池包括[-5, 256]。这之间的小整数数值相同时在小整数对象池中属于同一对象
        即是 a is b 返回True。简单字符串也是如此,对于其他对象则不适用

 

 

  • 整理给新手与正在学习python的朋友:
  • (Python学习书籍pdf版——————基础-爬虫-数据分析-机器学习-web,五大方向书籍应有尽有!现已上传50本,持续更新中)
  • (Python学习教程———————项目实战-项目源码-python环境搭建必要安装文件,正在整理更新中)
  • 花了挺长时间去办这件事情的,需要的点击我主页就能找到这篇文章,或者直接点击下方字体跳转:
  • 你想要的,应有尽有!50本python学习书籍获取地址/安装材料/python高质量基础进阶教程

 

阅读(2461) 评论(0)