반응형
나는 비교 대상이 None이 아닌 이상 대체로 ==를 사용하기 때문에 이 둘의 차이점을 깊게 생각해본 적이 없다.
근데 오늘 스택오버플로우를 서핑하다가 이와 관련된 글이 눈에 띄어서 읽어봤는데 재밌었다.
is는 reference 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
신기!
반응형
'개발 > python' 카테고리의 다른 글
[Python] Python으로 SMS 보내는 방법 (5) | 2019.02.08 |
---|---|
<파이썬; 코딩의 기술> 파이썬다운 생각 (2) | 2019.02.07 |
[python] print와 return의 차이점 (4) | 2017.10.27 |
[python] Python을 web에서 컴파일하는 여러 가지 방법 (2) | 2017.09.13 |
[python] 제너레이터(Generator) (3) | 2017.09.12 |
댓글