직장에서 PyQt 작업하는 도중 QTableWidget에 들어있는 데이터를 복사해야 하는 경우가 생겼다. 필자는 데이터를 꺼내서 옮겨 붙여넣는 과정이 매우 번거롭다고 생각했다. 그래서 QTableWidget 객체 자체를 복사하면 어떨까? 라는 의문을 가졌다. 그리고 처음으로 시도한 것은
copy 모듈을 사용하여 객체를 깊은 복사(deep copy)를 시도했다. 그러나, Can't Pickle 이라는 문구와 함께 복사가 되지 않았다. Pickle? 먹는 피클이 왜 나오지? 라는 궁금증과 함께 바로 구글링을 시도했다. QTableWidget과 같은 클래스는 model-view programming?으로 이루어져 있기 때문에 복사가 불가능하다는 글을 본 것 같다. 이 부분에 대해서는 추후에 따로 공부해야겠다. 본론으로 돌아와 계속 검색을 하던 도중 pickle이라는 모듈이 존재하는 것을 보았다. 궁금한 마음에 해당 링크를 보았더니 다음과 같은 글을 보게 되었다.
한눈에 들어오기 좋게 정리한 문서였다. 요점을 정리하자면 python의 객체들을 .pickle이라는 확장자 명의 파일로 직렬화(Serialize)하고 나중에 해당 파일을 역질렬화(Deserialize)하여 객체를 다시 불러올 수 있다. 필자가 생각하기에 역/직렬화의 장점은 특정 객체들을 파일이라는 형태로 보관하기 때문에 삭제하지 않는 이상 영구적으로 남아있고, 다른 프로젝트에서도 전역적으로 사용할 수 있다는 장점이 있다고 생각한다. 하지만, 다량의 데이터가 존재할 때에는 데이터베이스를 활용하는 것이 더 효율적이라고 생각한다. 물론 파일들을 데이터베이스나 서버에 보관할 수 있다면 얘기가 다르겠지만..
추후에 객체를 파일로 관리할 경우가 생길 때를 대비해서 이렇게 글로 남긴다...
공식 Docs
docs.python.org/ko/3/library/pickle.html
P.S : pickle 모듈로도 QTableWidget은 직렬화를 하지 못했다..
'[Language] - Python' 카테고리의 다른 글
#5. 덕 타이핑 (Duck Typing) (2) | 2020.12.29 |
---|---|
#4. 추상 클래스 (Abstract Class) (0) | 2020.12.28 |
#2. 접근제한자 (Access Modifier) (0) | 2020.12.14 |
#1. staticmethod, classmethod, instancemethod (0) | 2020.12.09 |
#0. args, kwargs (0) | 2020.12.09 |
댓글