python Interning
서론
참조
[Python] int type 변수의 identity 및 console과 script에서의 실행 결과
파이썬의 효과적인 메모리 재활용 방법 - Interning
기존에 공부할 때 파이썬에서는 자주 사용하는 숫자도 객체로 만들어 놓고 그 객체를 생성할 시 기존에 만들어져있던 reference를 리턴한다고 배웠습니다. 바로 이것이 Interning개념이죠. 숫자 obj의 경우는 -5~256 문자 obj의 경우는 [a-zA-z0-9_]에 해당하는 케이스는 이미 있는 obj를 사용합니다. 근데 이 실행 결과가 콘솔(interpreter)에서와 에디터(.py)에서가 다릅니다.
결과
콘솔에서는 공부했던 거처럼 숫자 257부터는 서로 다른 객체를 생성하게 되어 257부터는 서로가 다른 객체를 가리키게 되어 a is b의 결과가 false가 나오는 것을 볼 수 있습니다.
>>> a = 255
>>> b = 255
>>> a is b
True
>>> a = 256
>>> b = 256
>>> a is b
True
>>> a = 257
>>> b = 257
>>> a is b
False
하지만 에디터를 통해(저는 vscode를 사용했습니다.) .py을 생성하고 그것을 컴파일하여 돌려 보게 되면 모두 True가 나옴을 확인 할 수 있습니다. 왜 그런지 한참을 이유를 찾았는데 이 이유는 컴파일러가 코드를 분석하고 bytecode를 최적화하기 때문이라고 합니다.
a = 255
b = 255
print(a is b)
a = 256
b = 256
print(a is b)
a = 257
b = 257
print(a is b)
True
True
True
생각
그럼 이 결과가 어떻게 보면 python의 원리에 어긋나는 결과 같은데 컴파일러가 이렇게 맘대로 바꿔도 되는지 모르겠습니다. 일단 그렇다고 이해는 했는데 이 부분을 어떻게 해석해야 할까요.
참조링크에 설명이 쓰여 있긴 한데 그렇게 바꾼 합리적인 이유에 대해서는 쓰여 있진 않습니다. Interning 개념에 더해서 컴파일 타임에 추가적인 재활용이 일어난다고만 쓰여있네요.
python내 다른 글 보기
댓글남기기