2줄 요약
is
는 레퍼런스 체크
==
는 값 체크
내용
Python
에서 무언가를 비교할 때 is
를 많이 쓰고 했다.
is
와 ==
모두 값을 비교한다는 것만 알고 이 둘을 별로 구분없이 사용했다.(하지만 아니었다.)
1 | >>> a = 1 |
여기까지는 당연하다
1 | >>> a = 257 |
a is 257
은 False
를 반환하는 반면 a == 257
은 True
를 반환한다.
이것은 is
는 레퍼런스를 비교하고 ==
는 값을 비교하기 때문이다.
1 | >>> id(a) |
이와 같이 서로 다른 메모리 주소 값을 가지고 있기 때문에 위와 같은 결과가 나오게 된다.
1 | >>> a = 1 |
a = 1
을 하게 되면 메모리 주소가 같기 때문에 True
를 반환한 것!
하지만 이는 Python Interpreter에서 [-5, 256] 범위의 Integer를 미리 캐싱(?)하고 있기 때문에 발생하는 일이다.
1 | >>> def test(): |
저렇게 컴파일 된 함수(?)안에서는 똑같은 메모리를 바라보게 되어 비교해보면 True
를 반환한다
새롭고 신기한 Python
의 세계