Unit 8.1 참고 질문 있습니다.
, 유성구 꿀주먹님이 작성참고 | 값 비교에 is를 쓰지 않기
값을 비교할 때는 is를 사용하면 안 됩니다. 다음과 같이 변수 a에 -5를 할당한 뒤 a is -5를 실행하면 True가 나오지만 다시 -6을 할당한 뒤 a is -6을 실행하면 False가 나옵니다.
>>> a = -5 >>> a is -5 True >>> a = -6 >>> a is -6 False
왜냐하면 변수 a가 있는 상태에서 다른 값을 할당하면 메모리 주소가 달라질 수 있기 때문입니다. 따라서 다른 객체가 되므로 값이 같더라도 is로 비교하면 False가 나옵니다. 값(숫자)를 비교할 때는 is가 아닌 비교 연산자를 사용해야 합니다.
위 내용대로 실행하니 a is -6은 False가 아니라 True가 출력됩니다.
a에 -6을 재할당하고 id(a), id(-6)을 출력하니 같은 메모리 주소가 출력됩니다. 그럼 False가 아니라 True가 출력되는게 맞는거 아닌가요?
Re: Unit 8.1 참고 질문 있습니다.
, 도장_ 관리자님이 작성파이썬은 내부적으로 효율화하기 위해 255 이하의 숫자에 대해서는 캐싱을 하고 있습니다. 따라서 내부 ID가 같은 값이 나오지만, 256 이상의 값에 대해서는 매번 다른 내부 ID를 할당합니다. 즉, 객체를 늘 새로 생성합니다.
종종 255 이하의 숫자에 대해서 테스트하고서 넘겨 짚어서 문제가 생기는 경우가 있습니다.
is로는 비교하면 안 됩니다. 설명이 맞습니다.