Python Object Interning 파헤치기

Python Object Interning 파헤치기
Photo by Liam Drinan / Unsplash

들어가며,

어느날 우연히 파이썬의 메모리 영역과 Garbage Collection에 관심이 생겨, 파이썬의 객체 메모리 주소 관련하여 재밌는 실험을 진행해보았습니다.

a = ["i love python", "i love c", "i love java"]
b = a
b[0] = "i love java"

if id(a[0]) == id(a[2]):
    print("True")
else:
    print("False")

위 코드에서 올바른 출력은 무엇일까요? (파이썬 버전에 따라 결과가 상이할 수 있습니다.)

  1. True
  2. False
  3. Error 발생

Mutable VS Immutable

정답은 1. True입니다.

위 문제에 답하기 위해서는 두 가지 개념을 알고 있어야합니다.

첫번째, 파이썬 Mutable 객체와 Immutable 객체의 차이를 알고 있어야 합니다.

  • Mutable 객체는 값 변경 시 객체의 주소값이 변경되지 않습니다. (List, Dict)
  • 반면에 Immutable 객체는 값 변경 시 새로운 객체가 생성됩니다. (Int, Str, …)

따라서 Mutable 객체인 List b의 값이 변경되면, a는 b와 같은 메모리 주소를 참조하고 있기 때문에

a 리스트에도 b 리스트의 변경사항 “i love java”가 적용되게 됩니다.

Object Interning

두번째로 Python Object Interning이라는 개념을 알고 있어야합니다.

원래 a[0]의 “i love java”와 a[2]의 “i love java”는 엄연히 다른 주소값을 가지는 객체여야 맞습니다.

하지만 파이썬은 메모리 최적화 기법으로 Object Interning을 지원합니다.

이는 특정 조건의 Immutable 객체의 메모리를 재활용하는 것입니다.

Interning이 동작하는 특정 조건은 파이썬 버전이나 환경에 따라 다릅니다.

예를 들어 a = “i love java”를 선언하고 바로 다음에 b = “i love java”를 선언하면, Object Interning으로 인해 a와 b는 같은 객체의 메모리 주소를 가리키게 되는 것이죠.

이를 통해 파이썬은 사용자가 자주 사용하는 상수 값 등에 대해 메모리 최적화를 수행하게 됩니다.

이와 같은 이유 때문에 위 문제의 출력은 True가 되게 됩니다!

Object Interning 사용하는 법

앞서 Interning이 동작하는 조건이 있다고 했습니다. 링크 에서는 해당 조건을 아래와 같이 설명하고 있습니다.

  1. 문자열은 컴파일 단계에서 상수 값이어야 한다.
  2. 문자열은 20자 초과이거나 constant folding이 아니어야 한다.
  3. 문자열은 아스키 문자, 숫자, 밑줄로만 구성되어 있어야 한다.

위에서 constant folding이란 “John” + “Snow”와 같이 연산자로 이어진 문자열을 의미합니다.

또한 파이썬은 꼭 문자열이 아닌 object에 대해서도 interning을 수행할 수 있다고 합니다. 사실 Object Interning 조건은 파이썬의 버전과 환경에 따라 다르니 자신의 환경에 맞게 찾아보시는 것을 추천드립니다!

또한 아래 코드처럼 개발자가 직접 interning할 object를 지정할 수도 있답니다.

from sys import intern
 
a = intern("John Snow")
b = "John Snow"

이번 시간에는 Object Interning에 대해서 알아보았습니다. Object interning에 대해 좀 더 자세히 알아보고 싶으신 분들은 링크의 글도 추천드립니다! 구체적으로 interning이 어떻게 동작하는지 잘 설명되어 있습니다 :)
메모리 관리는 대용량 트래픽과 데이터 처리에서 중요한 주제인데요, 이번 기회에 각 언어별 Interning 기법에 관심을 가져보시는 것도 추천드립니다 👍👍

감사합니다 😊

Read more

[논문 리뷰] Learning Retrieval Augmentation for Personalized Dialogue Generation

[논문 리뷰] Learning Retrieval Augmentation for Personalized Dialogue Generation

이번 시간에는 Personalized dialogue generation을 RAG와 결합하여 시도한 "Learning Retrieval Augmentation for Personalized Dialogue Generation" 논문을 살펴봅니다. 특히 최근에 개인화된 AI가 주목 받고 있는데요, AI가 사용자의 페르소나, 정보, 성격 등을 반영한다면 더욱 풍성하고 도움이 되는 답변을 생성할 수 있습니다. 이를 Personalized dialogue generation이라고 하는데요. 연구팀은 어떻게 해당 문제를

By Yongwoo Song
[독서] 나는 왜 생각이 많을까?

[독서] 나는 왜 생각이 많을까?

✒️발상을 바꿔야 한다. 앞으로는 '불안해하지 말아야지'가 아니라 '불안과 더불어 살아가야지'라고 생각하자.나는 왜 생각이 많을까? | 홋타 슈고 | 서사원- 교보ebook머릿속의 스위치를 끄고 싶을 때 보는 뇌과학 이야기, 심플한 사고법은 아무나 가질 수 없다! 그러나 누구나 해 볼 수 있다! 짧게 생각하고 빠르게 행동하기 위한 필독서!

By Yongwoo Song
[독서] 자기 경영 노트 - 피터 드러커

[독서] 자기 경영 노트 - 피터 드러커

✒️성과를 올리는 모든 사람들은 목표를 달성하기 위한 실행 능력을 갖추고 있다. 이 실행 능력은 기업에서 일하든, 정부기관에서 일하든, 병원의 관리자이든, 대학의 학장이든 똑같다.피터 드러커 자기경영노트 | 피터 드러커 | 한국경제신문- 교보ebook어떻게 ‘성과를 내는 경영 리더’가 되는가 지식작업자를 위한 변화와 혁신의 5가지 법칙! 이 책의 주제는 성과를 내는 능력을 향상시키기 위한

By Yongwoo Song