== Operator (Equality Operator)
== เปรียบเทียบ ค่า (value) ของออบเจ็กต์ว่ามีค่าเท่ากันหรือไม่
is Operator (Identity Operator)
is เปรียบเทียบ id())
ตัวอย่างโค้ด
list1 = [1]
list2 = [1]
list3 = list1
print(id(list1)) # 140380664377096
print(id(list2)) # 140380664376904
# == เปรียบเทียบค่า
if list1 == list2:
print("True") # True เพราะค่าเท่ากัน [1] == [1]
else:
print("False")
# is เปรียบเทียบ identity
if list1 is list2:
print("True")
else:
print("False") # False เพราะเป็น object คนละตัว (id ต่างกัน)
if list1 is list3:
print("True") # True เพราะ list3 ชี้ไป object เดียวกับ list1
else:
print("False")
Output
140380664377096 140380664376904 True False True
สรุปความแตกต่าง
| Operator | เปรียบเทียบ | ใช้เมื่อไหร่ |
|---|---|---|
== | ค่า (Value Equality) | ตรวจสอบว่า "ค่า" เท่ากันหรือไม่ (ส่วนใหญ่ใช้ตัวนี้) |
is | ตัวตน (Identity) | ตรวจสอบว่า "ตัวแปรชี้ไป object เดียวกัน" (singleton, None, True/False) |
กรณีพิเศษ: Integer Caching (Small Integers)
a = 256
b = 256
print(a is b) # True (Python cache small ints -5 ถึง 256)
c = 257
d = 257
print(c is d) # False (เกิน cache range)
print(c == d) # True (ค่าเท่ากัน)
Best Practice
- ใช้
==สำหรับเปรียบเทียบค่าปกติ (string, number, list, dict) - ใช้
isเฉพาะตรวจสอบNone,True,Falseหรือ singleton objects - ไม่ใช้
isเปรียบเทียบ string หรือ number (ผลลัพธ์อาจไม่แน่นอนเนื่องจาก interning)
เข้าใจความแตกต่างนี้สำคัญมาก ป้องกันบั๊กที่หาได้ยากครับ