이런 분들이 찾고 있어요
이 레슨과 관련된 학습 키워드
코드를 읽고 설명하면, 합격합니다
이 레슨과 관련된 학습 키워드
Python 프로그래밍 — 첫 코드에서 실전까지 → 실전
CPython 바이트코드, dis 모듈, GIL 깊이, 메모리 관리, 객체 모델, descriptor, metaclass, __slots__, 인터닝, small integer cache
오늘은 파이썬 내부 동작을 왜 알아야 하는지 살펴보겠습니다.
파이썬이 느리다는 통념, 많이 들어보셨죠?
하지만 내부를 알면 코드 변경만으로 수십 배 성능 차이가 납니다.
그림 왼쪽 상단을 보시면 첫 번째 핵심 개념이 나옵니다.
바로 Small Integer Cache입니다.
씨파이썬은 시작 시 -5부터 256까지 정수를 미리 캐싱해 둡니다.
a = 256, b = 256이면 a is b가 True, 같은 객체입니다.
하지만 257 이상은 매번 새 객체를 만들어서 False가 됩니다.
루프 카운터와 인덱스에 자주 쓰이는 범위를 캐시한 설계입니다.
그림 오른쪽 상단을 보시면 참조와 복사의 차이가 나옵니다.
파이썬에서 변수는 값을 저장하는 게 아니라 참조입니다.
b = a는 복사가 아니어서 b를 바꾸면 a도 함께 바뀝니다.
독립 복사가 필요하면 copy.deepcopy()를 사용해야 합니다.
이제 그림 중간 왼쪽을 보시면 GIL 관련 내용이 있습니다.
GIL 때문에 CPU 작업은 스레드를 써도 번갈아 실행되어 느립니다.
반면 I/O 대기 중에는 GIL이 해제되어 스레딩이 효과적입니다.
CPU 집약 작업엔 멀티프로세싱, I/O엔 스레딩이나 asyncio를 씁니다.
중간 오른쪽의 디스크립터 프로토콜도 핵심 개념입니다.
@property를 쓰면 obj.name 접근 시 __get__이 호출됩니다.
속성처럼 보이지만 실제로는 메서드가 실행되는 구조입니다.
그림 하단 왼쪽을 보시면 메모리 최적화 방법들이 있습니다.
__slots__로 메모리 40%를, 제너레이터로 O(1) 메모리를 실현합니다.
레퍼런스 카운팅을 이해하면 순환참조 누수도 방지할 수 있습니다.
하단 가운데엔 이상한 동작 진단 방법이 나옵니다.
def f(x=[])처럼 기본값이 리스트면 호출 간에 공유되는 버그가 생깁니다.
is와 ==을 혼동하는 것도 버그의 흔한 원인입니다.
dis 모듈로 바이트코드를 분석하면 실행 흐름을 즉시 파악할 수 있습니다.
하단 오른쪽엔 AI/ML 실무 활용 사례도 정리되어 있습니다.
파이토치, 텐서플로 연동과 학습 파이프라인 병렬화가 대표적입니다.
결국 내부를 아는 개발자가 버그를 예방하고 성능을 설계합니다.