비교할 때 편집자가 경고를 my_var == None
표시하지만 사용할 때는 경고가 표시되지 않습니다 my_var is None
.
파이썬 셸에서 테스트를 수행하고 둘 다 유효한 구문인지 확인했지만 편집자 my_var is None
가 선호 한다고 말하고있는 것 같습니다 .
이것이 사실입니까, 그렇다면 왜 그렇습니까?
답변
요약:
is
객체의 아이덴티티 를 검사하려는 경우에 사용하십시오 (예 : var
is 인지 확인 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