สรุป:
ใช้is
เมื่อคุณต้องการตรวจสอบตัวตนของวัตถุ(เช่นการตรวจสอบเพื่อดูว่าvar
มีNone
) ใช้==
เมื่อคุณต้องการตรวจสอบความเท่าเทียมกัน (เช่นvar
เท่ากับ3
หรือไม่)
คำอธิบาย:
คุณสามารถมีคลาสแบบกำหนดเองที่my_var == None
จะส่งคืนTrue
เช่น:
class Negator(object):
def __eq__(self,other):
return not other
thing = Negator()
print thing == None #True
print thing is None #False
is
การตรวจสอบสำหรับวัตถุตัวตน มีเพียงวัตถุNone
เดียวดังนั้นเมื่อคุณทำmy_var is None
คุณกำลังตรวจสอบว่าจริง ๆ แล้วพวกเขาเป็นวัตถุเดียวกัน (ไม่ใช่แค่วัตถุที่เทียบเท่า )
กล่าวอีกนัยหนึ่ง==
คือการตรวจสอบความเท่าเทียมกัน (ซึ่งกำหนดจากวัตถุหนึ่งไปยังอีกวัตถุหนึ่ง) ในขณะที่is
ตรวจสอบตัวตนของวัตถุ:
lst = [1,2,3]
lst == lst[:] # This is True since the lists are "equivalent"
lst is lst[:] # This is False since they're actually different objects
is
- python.org/dev/peps/pep-0008/#programming-recommendations