[Python] Object Interning

hysong·2022년 7월 10일
0

Python

목록 보기
5/5

📌 Concept.

1.

객체 인터닝(Object Interning)이란, 특정한 불변(Immutable) 객체를 하나의 메모리 공간에 저장해놓은 후, 그 메모리를 계속해서 재활용하는 최적화 방식이다.

a = 5
b = 5
>>> id(a)
4302793136
>>> id(b)
4302793136

위에서 볼 수 있듯 a, b는 같은 메모리를 참조하고 있다.
즉, 매번 새로운 메모리에 5를 저장하여 참조하는 것이 아니라, 5를 저장한 하나의 메모리를 a, b가 모두 참조하는 것이다.

만약 5를 저장하고 있는 공간에 6이 새롭게 저장된다면 a와 b가 참조하고 있는 값 역시 6이 될 것이다.
물론 정수는 immutable하므로 그럴 일은 없겠지만 말이다.
interning을 불변 객체들을 대상으로 하는 것이 이러한 이유 때문이다.

이렇게 프로그래머가 자주 사용하는 값들을 interning함으로써 메모리를 보다 효율적으로 관리할 수 있게 된다.

2.

파이썬은 기본적으로 아래 객체들을 interning하도록 설계되어 있다.

  • 정수 -5 ~ 256
  • [a-zA-Z0-9]로 구성된 문자열

그러므로 위에서 살펴본 예시에서, id(5)도 사실 id(a), id(b)와 동일한 결과를 반환할 것이다.

interning 범위는 파이썬 버전, 코드 편집기 또는 통합 개발 환경, 컴파일 과정 내 Constant Folding 등의 이유로 확장될 수 있다.
실제로 파이썬을 다루다보면 훨씬 많은 객체들이 최적화되어 있음을 알 수 있다.

📌 sys.intern()

sys 모듈 내의 intern함수를 사용하면 프로그래머가 원하는 문자열 객체를 interning할 수 있게 된다.
참고로 intern함수는 매개변수 문자열을 그대로 반환하기까지 한다.

import sys

a = sys.intern('Hello World')
b = 'Hello World'
>>> id('Hello World')
4344613168
>>> id(a)
4344613168
>>> id(b)
4344613168

0개의 댓글