파이썬 써본 사람은 알겠지만 결론은 is로 비교하는 것


근데 왜 그러냐..




is는 객체의 동일성에 대한 비교("a is b"는 "id(a) == id(b)"와 동일)

==은 객체의 값에 대한 비교


그런데 None은 NoneType 클래스의 싱글턴 인스턴스이며

NoneType은 사용자가 상속할 수 없고 참조할 수도 없는 독특한 클래스

따라서 ==을 오버로딩해서 예상치 못한 행동을 하게 하는 것이 NoneType/None에 대해서는 불가능하다

결국 is를 쓰나 ==를 쓰나 비슷하게 동작하게 된다

None에 대해서 is 연산자로 비교시 True가 나오는 것은 None뿐이고

None에 대해서 == 연산자로 비교시 True가 나오는 것도 None뿐이다


그럼에도 불구하고 is를 쓰는게 낫다

첫번째로 벤치마크를 해보면 is를 쓰는 쪽이 훨씬 빠르다(상대적으로 그렇다는 거지 둘다 엄청 가벼운 연산이라 절대적으로 큰 차이가 나는 건 아니기는 하다)

두번째로 PEP8(Style Guide for Python Code) 때문이다

여기 보면 귀도 아재가 "Comparisons to singletons like None should always be done with is or is not, never the equality operators."라고 딱 None의 예까지 들어서 적어두셨다

아쉽게도 자세한 이유는 안 적어두셨다




== 쓴다고 당장에 큰일이 나는 건 아니지만... 그냥 남들, 특히 언어의 아버지께서 시키는 대로 하자