- 파이썬 무한 정수의 비밀 (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 |