본문 바로가기

Python

Python 버전별 정수 공유 범위

파이썬은 메모리의 효율적인 사용을 위해 동일한 값을 가진 정수와 문자열은 같은 객체를 공유한다.


그런데 정수의 경우 모든 값이 아닌 특정 범위에 있는 값들만 공유해서 사용하는데, 파이썬 일부 버전에서는 정수 공유 범위가 다르게 나타나기도 한다.

테스트

IDLE에서 파이썬 버전별로 변수 a, b에 동일한 정수 값을 할당한 뒤 객체를 비교해 보았다.


결과

각 버전별로 나온 결과를 정리해보면,
Python 1.5.2에서 2.2.3 까지의 버전은 -1에서 99까지의 정수 객체를 공유하고 있다.
Python 2.3.5, 2.4.3 버전은 -5에서 99까지의 정수 객체를 공유한다. 그리고
Python 2.5.2 버전과 2.6 버전은 -5에서 256까지의 정수 객체를 만들어 놓고 공유하는 것을 알 수 있다.
참고로 Python 2.7도 2.6 버전과 같은 결과를 보여준다.

추신
사실 정수의 경우 immutable이기 때문에 'is' 연산자로 객체의 본질을 비교하는 것이 별다른 의미가 없을 수도 있다. immutable이란 객체 내부의 값을 변경할 수 있는가라는 의미를 포함하고 있기 때문이다.
비록 파이썬이 모든 것을 객체로 다루고 있지만 정수나 문자열은 상수로 취급된다. 그 자체가 바로 데이터이다. 즉, 어떤 함수로 조작을 가한다 해도 그 자체가 변경되는 게 아니라, 조작에 대한 결과로 새로운 객체가 생성되어 반환될 뿐인 것이다.
이런 이유로 정수 객체에 대한 is 비교가 그다지 의미 없단 생각이 들지만, 단순한 호기심 해결 차원에서 위와 같은 테스트를 한번 해 보았다.