Python学习之 a == b 和 a is b 的区别

Python学习中经常会遇到 a == b 和 a is b 的问题, 也许你会为此迷惑。下面,我们来简单分析一下:

首先我们要了解对于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。简单字符串也是如此,对于其他对象则不适用
  • 12
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值