강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

Zetta Kim님의 프로필 이미지
Zetta Kim

작성한 질문수

프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)

파이썬 변수(2-2)

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 버전에서의 차이도 있었으니, 참고 부탁드려요.

감사합니다.

Zetta Kim님의 프로필 이미지
Zetta Kim

작성한 질문수

질문하기