🎯 핵심

Python의 내장함수는 C 언어로 구현되어 있어서 매우 빠릅니다.


📊 실행 흐름 비교

Python으로 작성한 함수

Python 코드 작성
    ↓
Python 인터프리터가 읽음
    ↓
매 줄마다 해석 (overhead)
    ↓
기계 코드 실행
    ↓
결과 반환 (느림 ⚠️)

C로 구현된 내장함수

Python에서 함수 호출
    ↓
미리 컴파일된 C 코드로 점프
    ↓
인터프리터 거치지 않고 직접 실행
    ↓
결과 반환 (빠름 ⚡️)

💻 코드 레벨 예시

Python 버전 (느림)

def my_sum(numbers):
    result = 0
    for num in numbers:           # 인터프리터가 반복 해석
        result += num             # 매번 연산 해석
    return result
 
# 100만 개 원소
import time
start = time.time()
my_sum(range(1000000))
print(time.time() - start)
# 약 0.05초

C 버전 (빠름)

# sum()은 CPython에서 이렇게 구현됨 (의사코드):
#
# long sum_list(PyObject *list) {
#     long total = 0;
#     for (int i = 0; i < list->length; i++) {
#         total += PyLong_AsLong(list->items[i]);
#     }
#     return total;
# }
#
# 인터프리터가 개입하지 않음 → 매우 빠름
 
import time
start = time.time()
sum(range(1000000))
print(time.time() - start)
# 약 0.002초 (25배 빠름!)

🔬 내장함수들의 C 구현

함수C 구현 위치성능
len()Objects/listobject.cO(1)
sum()Python/bltinmodule.cO(n) 최적화
sorted()Objects/listobject.cO(n log n) 최적화
max(), min()Python/bltinmodule.cO(n) 최적화
.append()Objects/listobject.cO(1) 분할상환
.split()Objects/unicodeobject.c최적화된 파싱

⚡ 왜 C가 빠를까?

측면PythonC
코드 형태텍스트 (해석 필요)기계어 (직접 실행)
메모리 접근추상화 계층 많음직접 접근
연산파이썬 객체 오버헤드원시 자료형 사용
최적화런타임컴파일 시점

구체적 차이

# Python에서 간단한 덧셈
result = a + b
 
# 실제로 일어나는 일:
# 1. a의 타입 확인
# 2. b의 타입 확인
# 3. 타입 호환성 확인
# 4. + 연산자 찾기
# 5. 메서드 호출
# 6. 결과 객체 생성
# → 매우 복잡한 오버헤드!
 
# C에서:
int result = a + b;
// CPU 한 줄 명령: ADD 레지스터
// 끝!

🧪 실제 성능 비교

1. 리스트 합계 (100만 원소)

numbers = list(range(1000000))
 
# Python 구현
def py_sum(lst):
    total = 0
    for n in lst:
        total += n
    return total
 
# 결과
import timeit
 
py_sum: 0.052초
sum():  0.002초
 
→ C 버전이 26배 빠름!

2. 리스트 정렬

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]
 
# Python 정렬 (Timsort, C 구현)
sorted(numbers)  # 0.0001초
 
# Python으로 버블정렬 구현
def bubble_sort(lst):
    for i in range(len(lst)):
        for j in range(len(lst)-1-i):
            if lst[j] > lst[j+1]:
                lst[j], lst[j+1] = lst[j+1], lst[j]
    return lst
 
bubble_sort(numbers.copy())  # 0.0005초 (수배 느림)

💡 개발자가 알아야 할 것

✅ 항상 내장함수 사용

# 좋음
result = sum(numbers)
result = max(numbers)
result = sorted(numbers)
text = "hello world".upper()
 
# 나쁨 (사용자 정의 함수)
result = my_sum(numbers)
result = my_max(numbers)
result = my_sorted(numbers)

✅ 리스트 컴프리헨션 (파이썬스러움)

# 좋음 (내부적으로 최적화됨)
filtered = [x for x in data if x > 10]
 
# 나쁨 (Python 루프)
filtered = []
for x in data:
    if x > 10:
        filtered.append(x)

✅ NumPy/Pandas (대량 데이터)

import numpy as np
 
# NumPy (C 레벨)
arr = np.array([1, 2, 3, 4, 5])
result = arr.sum()  # C 수준 성능
 
# 또는 Pandas
import pandas as pd
df['value'].sum()  # C 최적화

🎯 결론

상황선택이유
일반 데이터 처리내장함수C 최적화
대량 수치 계산NumPyBLAS/LAPACK (C/Fortran)
복잡한 로직사용자 정의유연성 필요

핵심 원칙:

Python 내장함수는 이미 최적화되어 있습니다. 먼저 내장함수로 해결할 수 있는지 확인하세요.


🔗 관련 개념

다음 단계:

관련 포스트: