파이썬 하다가 진짜 귀신 곡할 노릇을 봐서 질문드려요. is랑 ==가 다르다는 건 어렴풋이 아는데, 숫자에서 이상하게 동작해서 멘붕이 왔습니다.


이런 걸 발견했어요.


a = 100
b = 100
print(a is b) # True

a = 1000
b = 1000
print(a is b) # False ????


똑같이 값 넣었는데 100은 is가 True고 1000은 False예요. 이게 대체 무슨 일이죠? 값이 같으면 다 True여야 하는 거 아닌가요? 그럼 == 는 둘 다 True 나오던데 이건 또 왜 이런 거고요.


그래서 지금 헷갈리는 게, 값이 같은지 볼 때 is를 써야 하나 ==를 써야 하나 이거예요. 어떤 예제 코드 보면 None 체크할 때 if x is None 이렇게 쓰던데 이건 왜 ==가 아니라 is를 쓰는 거예요?


is는 같은 객체인지 보는 거고 ==는 값이 같은지 보는 거다 정도로 들었는데, 그럼 저 작은 숫자는 왜 같은 객체가 되는 건지 원리를 모르겠어요. 언제 is 쓰고 언제 == 써야 하는지 확실하게 구분해 주시면 감사하겠습니다.