본문 바로가기
Python/기초

[파이썬/Python] 정수(Integer) 2탄: 메모리 할당

by 모두의 케빈 2023. 7. 4.

이전 시간에는 파이썬에서 정수형의 정의와 무제한의 크기를 가질 수 있는 이유, 임의 정밀도에 대해 공부했습니다. 관련 내용이 궁금하시다면 아래 게시글 참고 부탁드립니다.

[파이썬/Python] 정수(Integer) 1탄: 임의 정밀도에 대하여

 

[파이썬/Python] 정수(Integer) 1탄: 임의 정밀도

정수(Integer)의 정의와 임의 정밀도 파이썬에는 여러 데이터 유형(Type)이 있습니다. 그중, 정수(Integer) 형이란 소수점이 없는 0, 음수, 양수를 의미합니다. 파이썬은 객체 지향 언어이므로, 모든 개

kevinitcoding.tistory.com

 

이번 시간에는 정수형만의 독특한 메모리 할당 구조에 대해 알아보도록 하겠습니다.

 

활용 빈도가 높은 정수의 메모리 할당


 

파이썬에서는 파일이 실행되는 순간, 자주 사용되는 정수에 대해 메모리 공간을 미리 할당합니다. 그리고 동일한 값의 정수를 표현한 변수를 같은 주소에 바인딩함으로써 메모리 효율성을 높일 수 있습니다.

자주 사용되는 정수라 함은, [-5, 256] 사이의 값을 의미합니다. 코드로 직접 살펴보겠습니다.

 

먼저 a와 b에 -5를 할당해 보겠습니다. id(변수명)을 하면 변수의 주소값을 확인할 수 있습니다. 아래 코드를 보시면 두 변수의 주소값이 동일하네요. 같은 주소에 바인딩된 것을 확인할 수 있습니다.

a = -5
b = -5

print(id(a), id(b)) # 140707115509344 140707115509344
print(id(a) == id(b)) # True

 

-5와 256 사이의 값인 128을 할당해 보겠습니다. 역시 결과는 동일하네요.

a = 128
b = 128

print(id(a), id(b)) # 140707115513600 140707115513600
print(id(a) == id(b)) # True

 

256을 대입해도 결과는 동일합니다.

 

a = 256
b = 256

print(id(a), id(b)) # 140707115517696 140707115517696
print(id(a) == id(b)) # True

 

이번에는 범위 밖의 숫자를 대입해 보겠습니다. -6부터는 값이 바뀌는 것을 확인할 수 있습니다.

a = -6
b = -6

print(id(a), id(b)) # 1829939615312 1829939615184
print(id(a) == id(b)) # False

 

257도 동일합니다. 주소값이 다르게 나오네요.

a = 257
b = 257

print(id(a), id(b)) # 1829939615344 1829939614928
print(id(a) == id(b)) # False

 

 

댓글