나는 처음에 이 둘이 완벽하게 동일하다고 생각했다.
사건의 발달은 이러하다.
조건문을 써줄 일이 있었는데 != 을 is not 으로 명시해주었다.
이렇게 하면 읽는 사람이 좀 더 쉽게 읽을 수 있을거라고 나름 생각했다.
그런데 문제가 생겼다.
당연히 될거라고 생각했는데 정상 동작하지 않았다.
is 가 무엇일까에 대해서 검색해보면 해답을 찾을 수 있다.
is 는 ==와 달리 값을 비교하는게 아니라 레퍼런스 즉 포인터를 비교한다.
python3 에서 변수는 내부적으로 데이터를 가리키는게 아니라 인스턴스 포인터를 가리킨다고 한다.
그러니 쉽게 말하면
is 연산자는 포인터(레퍼런스)를 비교하는 연산자이지 데이터를 비교하는 연산자가 아니라는 것이다.
그러니 주로 None 과 False, True 를 비교할때 사용하자.
내가 문제가 되었던건 값 비교에 is 를 썼기 때문이다.
간만에 재밌는 팁을 얻었다.
아래 블로그에서 도움을 얻었다.
감사합니다.
http://www.songtory.com/post/001001/1/264
반응형
'Python3 > Python3 lang' 카테고리의 다른 글
[Python3] python3의 itertools.groupby 사용 (0) | 2022.10.20 |
---|---|
[Python3] Exception has occurred: TypeError argument should be integer or bytes-like object, not 'str' (0) | 2022.06.26 |
[Pythone] Python3 Memory Error 발생 - 파이썬 메모리 에러 발생 (0) | 2022.04.02 |
[Python3] 코딩테스트 파이썬 사용시 유일한 단점 - 파이썬의 객체 복사 방식(깊은 복사와 얕은 복사) (0) | 2022.03.19 |
[Python3] 파이썬 @cache @lru_cache 데코레이터 (0) | 2022.03.13 |