Python 공부

정적 할당과 동적 할당 / 파이썬 int 자료형 범위

myun0506 2026. 1. 9. 17:53

 

- 파이썬 무한 정수의 비밀 (int 자료형의 범위에 제한이 없음)

 

  • C나 Java같은 다른 언어는 고정 정밀도 산술 (Fixed-precision arithmetic) 
    • 하드웨어(CPU)의 레지스터 크기에 맞춰 데이터를 처리하기 때문에 속도는 매우 빠르지만,
    • 표현할 수 있는 수의 범위에 한계가 명확함
  • 파이썬은 임의 정밀도 산술 (Arbitrary-precision arithmetic)
    • 파이썬3의 int는 내부적으로 PyObject 구조체로 구현되어 있음
    • 숫자를 30비트 단위로 쪼개서 배열 형태로 저장함
    • 숫자가 커지면 이 배열의 크기를 늘리는 동적 할당(Dynamic Allocation) 방식 사용
  • 장단점
    • 오버헤드
      • 단수 정수 연산도 배열을 순회하며 계산해야 하므로 CPU의 기본 명령어를 직접 사용하는 C언어보다 연산 오버헤드가 큼
  • 객체 참조 (Object Reference) 
    • 우리가 변수를 쓸 때는 위치를 참조하는 것!
    • 파이썬의 모든 변수는 포인터!!!
    • 변수는 실제 숫자 데이터가 저장된 PyObject 구조체의 메모리 시작 주소를 가리키고 있을 뿐!

 

 

- 정적할당과 동적할당

  • 정적 할당 (Static Allocation)
    • 컴파일 타임에 결정되는 메모리
    • 프로그램이 실행되기 전인 컴파일 단계에서 필요한 메모리 크기가 결정됨
    • 실행 속도가 매우 빠르고 관리가 자동(함수 종료 시 해제)이지만,
    • 프로그램 실행 중에 크기를 늘리거나 줄일 수 없음
    • ex) C언어의 int arr[10];
  • 동적 할당 (Dynamic Allocation)
    • 프로그램이 실행 중(Runtime)에 필요한 만큼 메모리를 요청함
    • 메모리를 효율적으로 쓸 수 있고 유연하지만 관리가 까다로움
    • C언어에서는 개발자가 직접 해제(free)해야하고, 안하면 메모리 누수(Memory Leak)가 발생함
    • 파이썬은 가비지 컬렉터(GC)가 이걸 대신 해줌!! (편리)

'Python 공부' 카테고리의 다른 글

리스트, 튜플, 딕셔너리  (1) 2026.01.10
입출력, 변수, 문자열  (0) 2026.01.10
타입 힌트, is 연산자 vs == 연산자  (0) 2026.01.09
SQL + Python 연동  (0) 2026.01.09
리스트 컴프리헨션 (List Comprehension)  (0) 2026.01.09