python pickle 사용하여 파이썬 객체 저장하고 불러오기 - 파이썬 객체의 직렬화
종종 list, dictionary같은 파이썬 고유의 객체를 저장하거나 불러올 순간이 있을 것이다. 이때, 우리는 가장 단순한 방법으로 pickle 라이브러리를 통해 객체를 저장하거나 불러올 수 있다.
가장 먼저 pickle이 동작하는 프로세스를 살펴보자. 파이썬의 객체가 주어질 때, 해당 객체를 다시 복원할 수 있도록 필요한 모든 정보들을 일련의 byte stream으로 변환한다 (serialization) 그리고나서 일종의 파일 형태로 보관하게 되는 것이다. 그리고 다시 파일을 객체로 불러올 때, 해당 byte stream으로부터 다시 python object를 복원한다. (deserialization)
pickl은 주어진 python 객체에 대해 serilization & deserialization을 수행하여 손쉽게 파일로 주고 받을 수 있는 형태로 만드는 역할을 한다고 볼 수 있다. 자 그럼 코드와 함께 더 자세히 살펴보자.
pickle의 dumps 함수를 이용해서 해당 dictionary를 직렬화하면 성공적으로 byte stream이 반환된 것을 알 수 있다. 이 byte stream으로 loads 함수의 인자로 주면, dictionary가 잘 복원된 것을 확인할 수 있다.
with open("pyobj.pkl", "wb") as f:
pickle.dump(temp, f)
with open("pyobj.pkl", "rb") as f:
temp = pickle.load(f)
이런식으로 byte형식의 객체를 거치지 않고, 바로 파일 입출력을 진행할 수 있고, 직접적으로 많이 쓰이는 코드의 형태이다.
사용자가 직접 정의한 class의 instnace까지 직렬화가 가능하긴 하지만, python version의 dependency가 크고, 큰 데이터에 대해서는 효율적이지 않다라는 단점도 존재한다. 사실 데이터가 커지면 굳이 pickle을 쓰기보다, 잘 정제한 후 data loader를 좀 더 체계적으로 설계하지 않을까 싶다.
여튼 간단한 형태로 파이썬 객체를 파일로 저장하거나 불러오기 위한 pickle을 살펴봤다. 더 자세한 내용은 https://docs.python.org/3/library/pickle.html 공식 도큐먼트에 좋은 설명이 포함되어 있다.