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

เปรียบเทียบออบเจ็กต์ใน Python: "is" vs "=="

Python มี 2 วิธีเปรียบเทียบออบเจ็กต์ที่ทำงานต่างกัน:

== (Equality Operator)

  • เปรียบเทียบ ค่า (value) ของออบเจ็กต์
  • สองออบเจ็กต์ที่มีเนื้อหาเหมือนกัน → True
  • ใช้ __eq__() method

is (Identity Operator)

  • เปรียบเทียบ ตัวตน/ที่อยู่หน่วยความจำ (identity/reference)
  • สองตัวแปรอ้างอิง ออบเจ็กต์เดียวกัน → True
  • ไม่สามารถ override ได้

ตัวอย่าง

list_1 = ['t', 'u', 't', 'o', 'r']
list_2 = ['t', 'u', 't', 'o', 'r']  # เนื้อหาเหมือน แต่ออบเจ็กต์ต่างกัน
list_3 = list_1                    # อ้างอิงออบเจ็กต์เดียวกัน

print(list_1 == list_2)  # True  (ค่าเท่ากัน)
print(list_1 is list_2)  # False (ออบเจ็กต์ต่างกัน)
print(list_1 is list_3)  # True  (ออบเจ็กต์เดียวกัน)

ผลลัพธ์

True
False
True

กรณีพิเศษ: Integer Caching

a = 256
b = 256
print(a is b)  # True (Python cache small integers -5 to 256)

c = 257
d = 257
print(c is d)  # False (นอกช่วง cache)

แนวทางปฏิบัติที่ดี

  • ใช้ == สำหรับเปรียบเทียบค่า (ส่วนใหญ่)
  • ใช้ is สำหรับเช็ค None, True, False หรือ singleton objects
  • อย่าใช้ is เปรียบเทียบ string หรือ number (พฤติกรรมไม่แน่นอน)