앞에서 x == None을 절대 사용하면 안 되는 이유를 살펴보았지만, 결국 그건 형식상의 문제이자 파이썬다움에 대한 이야기였습니다. 다시 말해 그 형식을 깨뜨리더라도 프로그램은 제대로 동작할 것입니다. 하지만 재사용된 값은 이와 다르기에, 결국 다음과 같은 사실을 알게 될 것입니다.
>>> a = 5 * 5 >>> b = 21 + 4 >>> a is b, a == b (True, True)
이 코드를 따라 너무 영리하게 생각을 늘려가면, 동일성 비교가 동등성 비교보다 빠를 것이라는 결론을 내릴 수 있습니다. 어느 정도는 틀린 말이 아닙니다.
>>> def intern_id(a, b): ... for _ in range(20_000_000): ... a is b ... >>> def intern_eq(a, b): ... for _ in range(20_000_000): ... a == b ... >>> %timeit intern_id(a, b) 361 ms ± 2.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) >>> %timeit intern_eq(a, b) 448 ms ± 9.96 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)