언어/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 더 많은 객체 지원 (람다 함수 등), 고급 직렬화 필요 시 사용

 

반응형