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