Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ความแตกต่างระหว่าง == และ is ใน Python

== Operator (Equality Operator)

== เปรียบเทียบ ค่า (value) ของออบเจ็กต์ว่ามีค่าเท่ากันหรือไม่

is Operator (Identity Operator)

is เปรียบเทียบ ตัวตน (identity) ว่าทั้งสองตัวแปร ชี้ไปที่ออบเจ็กต์เดียวกันในหน่วยความจำ หรือไม่ (ตรวจสอบ 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)

เข้าใจความแตกต่างนี้สำคัญมาก ป้องกันบั๊กที่หาได้ยากครับ