인프런 커뮤니티 질문&답변
print(id(m) == id(n)) --> False
작성
·
17
·
수정됨
0
저는 False 가 나옵니다.
찾아보니 False가 정상이고 True는 캐싱으로 설명이 나옵니다.
(256보다 큰 숫자이므로 작은 정수 캐싱 범위에 해당하지 않음)
강사님 설명 부탁합니다.
m = 800
n = 800
print(id(m))
print(id(n))
print(id(m) == id(n))답변 1
1
좋은사람
지식공유자
안녕하세요. 좋은 질문 주셨습니다.
파이썬 버전에 따라 상이하고 이해하고 계신대로 작은 숫자는 캐싱으로 동일하게 나오게 됩니다.
초기 버전(또는 대화형 REPL 환경)에서는 컴파일러가 같은 상수로 인식하는 경우가 있었습니다.
>>> a = 800
>>> b = 800
>>> a is b
True # 일부 버전이나 REPL에선 이렇게 나옴
m = 100 ✅ (같은 객체)
m = 800 ❌ (새 객체)
요약을 하면
파이썬은 -5~256까지의 정수를 미리 캐싱
이 범위 내 숫자는 같은 객체를 가리키지만,
그 밖의 숫자는 새로 생성되어 id가 다릅니다.
Python 2.x / 초창기 3.x 버전에서의 차이도 있었으니, 참고 부탁드려요.
감사합니다.





