is vs == - Khi nào dùng cái nào?
Sự khác biệt
Phần tiêu đề “Sự khác biệt”== - Equality (giá trị bằng nhau)
Phần tiêu đề “== - Equality (giá trị bằng nhau)”a = [1, 2, 3]b = [1, 2, 3]print(a == b) # True - Cùng giá trịis - Identity (cùng object)
Phần tiêu đề “is - Identity (cùng object)”a = [1, 2, 3]b = [1, 2, 3]print(a is b) # False - Khác object
c = aprint(a is c) # True - Cùng objectKhi nào dùng is
Phần tiêu đề “Khi nào dùng is”✅ So sánh với None
Phần tiêu đề “✅ So sánh với None”# ✅ ĐÚNGif value is None: pass
# ❌ SAIif value == None: pass✅ So sánh với True/False
Phần tiêu đề “✅ So sánh với True/False”# ✅ OKif flag is True: pass
# ✅ Nhưng tốt hơnif flag: pass✅ Kiểm tra cùng object
Phần tiêu đề “✅ Kiểm tra cùng object”if a is b: print("Cùng object")Khi nào dùng ==
Phần tiêu đề “Khi nào dùng ==”✅ So sánh giá trị
Phần tiêu đề “✅ So sánh giá trị”# ✅ Stringsif name == "Alice": pass
# ✅ Numbersif count == 10: pass
# ✅ Lists/dictsif data == expected: passCạm bẫy
Phần tiêu đề “Cạm bẫy”String/int caching
Phần tiêu đề “String/int caching”# Stringsa = "hello"b = "hello"print(a is b) # True (interned)
# Integersx = 256y = 256print(x is y) # True (cached)
x = 257y = 257print(x is y) # False (not cached)Tóm tắt
Phần tiêu đề “Tóm tắt”
isvs==:
is→ Identity (cùng object?)==→ Equality (cùng giá trị?)- ✅
ischo: None, True, False- ✅
==cho: strings, numbers, data structures
Pattern:
if value is None: # Identityif value == expected: # Equality