1. 程式人生 > >Python學習之 a == b 和 a is b 的區別

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。簡單字串也是如此,對於其他物件則不適用