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자 미만의 공백을 포함하지 않는 문자열을 자동으로 인터닝한다.