import 가 진짜 하는 일
import json 쓰면 Python 이 sys.path 의 디렉토리들을 순서대로 검색, json 이름의 파일/디렉토리 찾고, 본문 한 번 실행 (결과 sys.modules 에 캐시), 네임스페이스에 json 이름 바인딩. 이후 import json 호출은 dict lookup 일 뿐 — 본문 안 다시 실행.
4 import 형태
import x — 이름 x 바인딩. import x.y — x 바인딩, x.y 로 접근. from x import y — y 바인딩 (x 로드되지만 바인딩 X). from x import y as z — z 바인딩. from 형태가 y 를 sub-module 또는 x 의 속성으로 찾음.
절대 vs 상대 import
절대 import 는 전체 path — from mypackage.subpkg import mod. 상대 import 는 점 사용 — from . import sibling (같은 패키지), from .. import parent_sibling (부모 sibling). 현대 Python 스타일 — 절대 import 선호, 패키지 ship 하면서 안에서 import 할 때만 상대 (rename 시 깨지는 문제 회피).
from x import * 함정
from x import * 가 x 가 노출하는 모든 거 import (__all__ 또는 fallback 으로 public 이름). 네임스페이스 오염 + "이 이름 어디서 왔지?" 답하기 어렵게. REPL 편의와 빡빡 scope 의 wildcard re-export 드문 경우에 예약.