YUDA't

나는 비교 대상이 None이 아닌 이상 대체로 ==를 사용하기 때문에 이 둘의 차이점을 깊게 생각해본 적이 없다.

근데 오늘 스택오버플로우를 서핑하다가 이와 관련된 글이 눈에 띄어서 읽어봤는데 재밌었다.


isreference equality. 메모리 상의 두 object를 비교한다. 

두 reference가 같은 object를 가리키는지 확인할 수 있다.


==value equality. 을 비교한다.

두 object가 같은 값을 가지는지 알 수 있다.


예시를 보자.

>>> foo = 10
>>> dir(foo) == dir(10)
True
>>> dir(foo) is dir(10)
False



동일한 변수의 dir()을 가져왔음에도 이들은 같은 값을 가질 뿐, 같은 object는 아니기 때문에 

is로 비교할 시, False를 리턴한다.


또 하나 재미있는 점은,

파이썬에는 -5부터 256까지의 수가 캐싱되어 있어 이들 값을 가진 변수들은 같은 object로 간주된다는 것이다.

>>> a = 256
>>> b = 256
>>> a == b
True
>>> a is b
True
>>> a = 257
>>> b = 257
>>> a == b
True
>>> a is b
False


신기!