언어/Python
[ Python ] pickle - 기본 사용법
Soso Dev
2025. 6. 4. 20:45
반응형
pickle protocol은 Python 객체를 바이너리 형태로 직렬화(serialize)하거나 역직렬화(deserialize)할 때 사용하는 포맷 버전입니다.
Python의 pickle 모듈은 여러 프로토콜 버전을 지원하며, 각 버전은 기능, 성능, 호환성 면에서 차이가 있습니다.
1. Pickle 프로토콜이란?
- Python 객체를 .pkl 파일이나 byte stream으로 저장할 때 사용하는 직렬화 포맷의 버전
- 숫자가 높을수록 최신 기능을 포함하고 있지만, 낮은 버전과의 호환성은 떨어질 수 있음
2. 프로토콜 버전별 요약
버전 Python 버전 특징
0 | 모든 Python 버전 | ASCII 기반. 사람도 읽을 수 있음. |
1 | Python 2.3+ | 바이너리 포맷 도입. |
2 | Python 2.3+ | 새로운 클래스의 효율적 저장 지원. |
3 | Python 3.0+ | Python 3 전용. bytes/str 구분 개선. |
4 | Python 3.4+ | 큰 데이터, 더 많은 타입 지원. |
5 | Python 3.8+ | out-of-band 데이터 전송 지원 (buffer protocol) |
📌 최신 Python 버전(예: 3.11 이상)에서는 기본으로 최신 프로토콜 버전이 사용됩니다.
3. 사용 방법
import pickle
data = {'a': 1, 'b': 2}
# 특정 프로토콜로 저장
with open("data.pkl", "wb") as f:
pickle.dump(data, f, protocol=4) # protocol=4를 명시
# 로드 (프로토콜 버전은 자동 감지됨)
with open("data.pkl", "rb") as f:
obj = pickle.load(f)
1. pandas의 to_pickle에서 사용
df.to_pickle("data.pkl", protocol=5)
4. 기타
1. 호환성 주의
- Python 3에서 protocol=3 이상을 사용하면 Python 2에서 읽을 수 없습니다.
- 다른 환경에서 파일을 공유할 경우 프로토콜 버전을 명시하는 것이 좋습니다.
- 가장 호환성을 원하면 protocol=2 사용 (Python 2/3 모두 가능)
2. protocol=5의 주요 특징 (Python 3.8+)
- 대용량 객체 처리 향상
- out-of-band 데이터 지원 (예: shared memory에 buffer 저장)
- 고성능 데이터 전송에 유리
3. 현재 환경의 최대 지원 프로토콜 확인
import pickle
print(pickle.HIGHEST_PROTOCOL)
4. 관련 라이브러리 비교
라이브러리 특징
pickle | 기본 제공, 범용적 |
joblib | 큰 NumPy 배열 처리에 최적화 (머신러닝에서 많이 사용) |
dill | 더 많은 객체 지원 (람다 함수 등), 고급 직렬화 필요 시 사용 |
반응형