[Python 모듈] pickle : 객체를 직렬화하고 역직렬화하는 모듈

1. pickle모듈이란?

 

pickle 모듈은 파이썬 내장 모듈 중 하나로, 객체를 직렬화(Serialization)하고, 역직렬화(Deserialization)하는 모듈입니다. pickle 모듈은 다양한 객체 타입을 지원합니다. 리스트, 튜플, 딕셔너리 등의 일반적인 컨테이너 타입은 물론, 사용자 정의 객체나 내장 타입(예: int, float, str 등)도 지원합니다. 또한, pickle 모듈은 객체의 내부 구조를 재귀적으로 탐색하며 객체를 직렬화하므로, 객체 내부에 다른 객체가 존재하는 경우에도 이를 쉽게 처리할 수 있습니다.


pickle 모듈은 별도의 설치 과정이 필요없습니다. 모듈을 사용하려면 아래와 같이 import를 하면 됩니다.

import pickle

 


2. pickle.dump() 

 

pickle.dump() 함수는 주어진 객체(obj)를 파일(file)에 직렬화하여 저장하는 함수입니다. 저장된 파일은 나중에 다시 역직렬화하여 객체를 복원할 수 있습니다.

 

pickle.dump(obj, file, protocol=None, *, fix_imports=True)

 

  • obj : 직렬화할 객체
  • file : 객체를 저장할 파일 객체(file-like object)
  • protocol : 직렬화 프로토콜 버전을 지정, 기본값은 None이며, 가장 높은 버전을 사용합니다.
  • fix_imports : True로 설정하면, Python 2와의 호환성을 위해 내장 모듈의 이름을 조정합니다.

 

코드에서는 'mylist.pickle' 파일을 바이너리 쓰기 모드('wb')로 열고, pickle.dump() 함수를 사용하여 mylist 객체를 파일에 저장합니다. 이후 파일을 닫습니다.

import pickle

mylist = [1, 2, 3, 4, 5]

with open('mylist.pickle', 'wb') as f:
    pickle.dump(mylist, f)

 


3. pickle.load()

 

pickle.load() 함수는 저장된 파일에서 객체를 역직렬화하여 가져오는 함수입니다.

 

pickle.load(file, *, fix_imports=True, encoding="ASCII", errors="strict")

 

  • file : 역직렬화할 파일 객체(file-like object)
  • fix_imports : True로 설정하면, Python 2와의 호환성을 위해 내장 모듈의 이름을 조정합니다.
  • encoding : 파일 객체의 인코딩을 지정합니다. 기본값은 "ASCII"입니다.
  • errors : 디코딩 에러 처리 방식을 지정합니다. 기본값은 "strict"입니다.

 

코드에서는 'mylist.pickle' 파일을 바이너리 읽기 모드('rb')로 열고, pickle.load() 함수를 사용하여 mylist 객체를 파일에서 읽어옵니다. 이후 가져온 객체를 출력합니다.

import pickle

with open('mylist.pickle', 'rb') as f:
    mylist = pickle.load(f)
    print(mylist)

 


4. pickle.dumps()

 

pickle.dumps() 함수는 주어진 객체(obj)를 직렬화하여 바이트 스트림으로 반환하는 함수입니다. 바이트 스트림은 0또는 1의 이진 데이터로 이루어진 연속적인 데이터입니다.

 

pickle.dumps(obj, protocol=None, *, fix_imports=True)

 

  • obj : 직렬화할 객체
  • protocol : 직렬화 프로토콜 버전을 지정,  기본값은 None이며, 가장 높은 버전을 사용합니다.
  • fix_imports : True로 설정하면, Python 2와의 호환성을 위해 내장 모듈의 이름을 조정합니다.

 

코드에서는 mylist 객체를 pickle.dumps() 함수를 사용하여 직렬화하고, 반환된 바이트 스트림을 data 변수에 저장합니다. 이후 data를 출력합니다.

import pickle

mylist = [1, 2, 3, 4, 5]

data = pickle.dumps(mylist)
print(data)

 


5. pickle.loads()

 

pickle.loads() 함수는 바이트 스트림으로 직렬화된 객체를 역직렬화하여 반환하는 함수입니다. 

 

pickle.loads(data, *, fix_imports=True, encoding="ASCII", errors="strict")

 

  • data : 직렬화된 바이트 스트림
  • fix_imports : True로 설정하면, Python 2와의 호환성을 위해 내장 모듈의 이름을 조정합니다.
  • encoding : 파일 객체의 인코딩을 지정합니다. 기본값은 "ASCII"입니다.
  • errors : 디코딩 에러 처리 방식을 지정합니다. 기본값은 "strict"입니다.

 

코드에서는 mylist 객체를 pickle.dumps() 함수로 직렬화하고, 이를 data 변수에 저장합니다. 이후 pickle.loads() 함수를 사용하여 data에서 객체를 역직렬화하여 mylist_copy 변수에 저장합니다. 이후 mylist_copy를 출력합니다. 출력 결과는 mylist와 동일한 [1, 2, 3, 4, 5]가 출력됩니다.

import pickle

mylist = [1, 2, 3, 4, 5]

data = pickle.dumps(mylist)
mylist_copy = pickle.loads(data)

print(mylist_copy)