[python] 파이썬 없음 비교 : “is”또는 ==를 사용해야합니까?

비교할 때 편집자가 경고를 my_var == None표시하지만 사용할 때는 경고가 표시되지 않습니다 my_var is None.

파이썬 셸에서 테스트를 수행하고 둘 다 유효한 구문인지 확인했지만 편집자 my_var is None가 선호 한다고 말하고있는 것 같습니다 .

이것이 사실입니까, 그렇다면 왜 그렇습니까?



답변

요약:

is객체의 아이덴티티 를 검사하려는 경우에 사용하십시오 (예 : varis 인지 확인 None). 평등== 을 확인하려는 경우에 사용하십시오 (예 :?와 같음 ).var3

설명:

당신 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일반적으로 임의의 객체를 싱글 톤과 비교할 때 None더 빠르고 예측 가능하기 때문에 선호됩니다 . 피연산자의 정확한 유형과 심지어 순서에 따라 달라지는 is반면 항상 개체 ID로 비교합니다 ==.

이 권장 사항은 PEP 8에 의해 지원되는데 , 이는 “없음과 같은 싱글 톤과의 비교는 항상 항등 연산자를 사용하지 않고 또는 로 수행해야합니다”라고 명시 적으로 명시 하고 있습니다 .isis not


답변

PEP 8은 is싱글 톤을 비교할 때 연산자 를 사용하는 것이 더 좋다고 정의합니다 .


답변