Python의 Interning (Integer와 String)

1. Integer Optimization

a = 10
b = 10
를 선언했다고 가정하자.

분명히 integer는 primitive type 자료형이라 call by value로 동작해서 두 개의 id값이 달라야 할 것 같다.

그런데.. hex(id(a)) == hex(id(b)) # True가 출력된다.
어째서 True일까?

Python은 자주 사용하는 integer는 global scope에 미리 등록해두고 싱글톤처럼 사용한다.
(범위는 -5 ~ 256까지)

그래서 위 범위 내에서는 언제나 싱글톤처럼 동작하고 257부터는 객체 주소값이 달라지게 된다.


2. String optimization

파이썬은 자주 사용하는 Immutable한 객체는 인터닝한다.
# 인터닝이란, 자주 사용하는 객체의 재사용을 빠르게 하기 위해 시스템 상에 상수처럼 등록해놓는 것을 의미한다.
컴파일 시점에 변수명, 클래스명, 함수명은 인터닝 된다.
또한 강제로 sys.intern() 메소드를 사용하여 인터닝 할 객체를 강제 지정할 수 있다.
문자열의 경우엔 20자 미만의 공백을 포함하지 않는 문자열을 자동으로 인터닝한다.

댓글

이 블로그의 인기 게시물

로컬 Tomcat 서버 실행속도 개선

2019.05.23 - SQLAlchemy 의 객체 상태 관리 (expire, refresh, flush, commit) 에 관한 이해

2020.02.17 Python의 multiprocessing 중 Pool.map(), chunksize에 관한 내용