더북(TheBook)

앞에서 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)
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.