Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Khác Biệt Giữa Toán Tử == và is Trong Python: So Sánh Giá Trị vs So Sánh Đối Tượng

== (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 b có thể True.
  • Không bao giờ dùng is để so sánh giá trị số/string (trừ None, True, False). Luôn dùng ==.
  • is nhanh 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.