728x90 CPython내부구조4 [PYTHON] 리스트와 튜플의 2가지 메모리 할당 방식 차이와 성능 최적화 방법 파이썬에서 데이터를 담는 가장 기본적인 컨테이너인 리스트(List)와 튜플(Tuple)은 겉보기에는 비슷해 보이지만, 내부적으로 메모리를 다루는 철학은 완전히 다릅니다. 단순히 "리스트는 수정 가능하고, 튜플은 불변이다"라는 수준을 넘어, 대규모 데이터를 다룰 때 왜 리스트가 더 많은 메모리를 점유하는지, 그리고 초과 할당(Over-allocation)이라는 메커니즘이 성능에 어떤 영향을 미치는지 전문가의 시각에서 심층 분석합니다.1. 가변성과 불변성이 만드는 메모리 구조의 차이파이썬의 리스트는 가변(Mutable) 객체입니다. 이는 프로그램 실행 중에 요소의 추가나 삭제가 빈번하게 일어날 수 있음을 의미합니다. 반면 튜플은 불변(Immutable) 객체로, 한 번 생성되면 크기나 내용이 절대 변하지 않.. 2026. 3. 16. [PYTHON] 파이썬 바이트코드 분석 및 수정을 통한 성능 개선의 3가지 방법과 해결책 파이썬은 흔히 '느린 언어'라는 오명을 쓰곤 하지만, 이는 파이썬이 고수준 언어로서 제공하는 편의성 이면에 숨겨진 추상화 계층 때문입니다. 파이썬 소스 코드는 실행 전 바이트코드(Bytecode)로 컴파일되며, 이 바이트코드가 파이썬 가상 머신(PVM) 위에서 돌아갑니다. 과연 우리는 이 바이트코드를 직접 분석하거나 수정하여 프로그램의 병목 현상을 해결할 수 있을까요? 오늘날의 고급 개발자들은 dis 모듈을 넘어 바이트코드 레벨의 최적화를 통해 파이썬의 한계를 극복하고 있습니다. 본 포스팅에서는 그 구체적인 방법과 실전 사례를 다룹니다.1. 파이썬 바이트코드의 구조와 PVM의 동작 원리파이썬 코드는 .pyc 파일에 저장되는 중간 단계 언어인 바이트코드로 변환됩니다. 이는 기구적인 기계어보다는 높고 소스 .. 2026. 3. 16. [PYTHON] Py_Initialize() 호출 시 내부 초기화 3단계 과정과 환경 구성 방법 파이썬을 독자적인 애플리케이션으로 실행하는 것을 넘어, C 또는 C++ 프로그램 내부에 파이썬 인터프리터를 임베딩(Embedding)할 때 가장 먼저 마주하는 관문이 바로 Py_Initialize() 함수입니다. 단순히 "파이썬을 켠다"는 개념을 넘어, 이 단일 함수 호출 내부에선 메모리 할당, 인터프리터 상태 구축, 내장 모듈 로딩 등 복잡한 엔진 가동 프로세스가 일어납니다. 본 아티클에서는 CPython의 소스 레벨 분석을 통해 Py_Initialize()가 수행하는 핵심 초기화 과정과 이 과정에서 발생할 수 있는 문제의 해결책을 전문적으로 다룹니다.1. 파이썬 엔진 가동의 첫 단추: 런타임 상태 초기화Py_Initialize()가 호출되면 가장 먼저 수행되는 작업은 파이썬 런타임 구조체(Runtim.. 2026. 3. 16. [PYTHON] 정수 인터닝의 2가지 범위 제한 이유와 메모리 효율 최적화 방법 파이썬으로 코딩을 하다 보면 가끔 상식적으로 이해하기 힘든 기묘한 현상을 마주하게 됩니다. 예를 들어, 두 변수에 똑같이 100을 할당하고 is 연산자로 비교하면 True가 나오지만, 1000을 할당하면 False가 나오는 현상입니다. 이것은 파이썬의 결함이 아니라, 메모리 사용량을 극단적으로 절약하기 위한 고도의 전략인 정수 인터닝(Integer Interning) 때문입니다. 오늘 이 글에서는 정수 인터닝이 정확히 어떤 숫자의 범위에서 발생하는지, 왜 하필 그 범위인지, 그리고 이를 활용해 대규모 시스템의 성능을 개선하는 방법에 대해 심층적으로 논의하겠습니다.1. 정수 인터닝(Integer Interning)의 정의와 메커니즘인터닝(Interning)이란 자주 사용되는 객체를 메모리에 단 한 번만 생.. 2026. 3. 16. 이전 1 다음 728x90