== (Equality Operator)
So sánh giá trị của hai đối tượng. Trả về True nếu giá trị bằng nhau.
is (Identity Operator)
So sánh định danh (identity) - tức là hai biến có trỏ đến cùng một đối tượng trong bộ nhớ hay không. Trả về True nếu cùng id().
Ví dụ minh họa
list1 = [1]
list2 = [1]
list3 = list1
print(id(list1)) # 140380664377096
print(id(list2)) # 140380664376904 (khác list1)
# So sánh giá trị
print(list1 == list2) # True (giá trị đều là [1])
# So sánh identity
print(list1 is list2) # False (khác object)
print(list1 is list3) # True (cùng object)
Kết quả
140380664377096
140380664376904
True
False
True
Lưu ý quan trọng
- Python cache (intern) các integer nhỏ (-5 đến 256) và một số string ngắn →
a = 100; b = 100; a is bcó thể True. - Không bao giờ dùng
isđể so sánh giá trị số/string (trừNone,True,False). Luôn dùng==. isnhanh hơn==(chỉ so sánh địa chỉ bộ nhớ).
Khi nào dùng is?
- Kiểm tra
None:if x is None: - Kiểm tra singleton/unique object.
- Kiểm tra cùng instance trong pattern Singleton, cache.