星期六, 5月 09, 2015

python: is 和 == 的區別

Python 學習筆記

is 是判定 object 相同, 
== 是判定 value 相同


所謂 object 相同,若 a 是某 class,b = a,經過這種只有 copy 外殼的 shadow copy,而非 b 另外配置記憶體,逐 byte copy a 成員的 deep copy,可說 a is b。

簡言之, a = b 只有 shadow copy,內部一樣,所以 a is b 為 True。

# code
class A:
 def f2(x): return x
a = range(100)

a1 = A   
a2 = a1 
print 'id(a1)={}, id(a2)={}'.format(id(a1), id(a2))
print id(a1.a), id(a2.a)
print a1 is a2

# output
id(a1)=34986168, id(a2)=34986168
46065184 46065184
True


而比對字串, value, 使用 is 非常危險. 
除非是同 set 內的 string, 怎知兩個是相等呢? 

a = '123.jpg'
a.split('.')[1] is 'jpg'  # FALSE
a.split('.')[1] == 'jpg' # TRUE

沒有留言: