diff --git a/memozo/memozo.py b/memozo/memozo.py
index a67bbe5..e4e3311 100644
--- a/memozo/memozo.py
+++ b/memozo/memozo.py
@@ -76,3 +76,32 @@ class Memozo(object):
             return _wrapper
 
         return wrapper
+
+    def pickle(self, name=None, ext='pickle', protocol=None):
+
+        def wrapper(func):
+            _name = func.__name__ if name is None else name
+
+            @functools.wraps(func)
+            def _wrapper(*args, **kwargs):
+                args = utils.get_bound_args(func, *args, **kwargs)
+                args_str = utils.get_args_str(args)
+                sha1 = utils.get_hash(_name, func.__name__, args_str)
+                file_path = os.path.join(self.base_path, "{}_{}.{}".format(_name, sha1, ext))
+
+                if utils.log_exisits(self.base_path, _name, func.__name__, args_str) and os.path.exists(file_path):
+                    with open(file_path, 'rb') as f:
+                        obj = pickle.load(f)
+                    return obj
+
+                obj = func(*args, **kwargs)
+
+                with open(file_path, 'wb') as f:
+                    pickle.dump(obj, f, protocol=protocol)
+                utils.write(self.base_path, _name, func.__name__, args_str)
+
+                return obj
+
+            return _wrapper
+
+        return wrapper

implement pickle
```py
@m.pickle()
```
diff --git a/tests/test_memozo.py b/tests/test_memozo.py
index e224e0a..4c39e59 100644
--- a/tests/test_memozo.py
+++ b/tests/test_memozo.py
@@ -1,6 +1,7 @@
 import os
 import unittest
 import codecs
+import pickle
 
 from memozo import Memozo, utils
 
@@ -115,3 +116,30 @@ class TestMemozoGenerator(unittest.TestCase):
     def test_load_data_from_cache(self):
         # TODO(sotetsuk): WRITE THIS TEST
         pass
+
+
+class TestMemozoPickle(unittest.TestCase):
+
+    def test_no_cache_output(self):
+        base_path = './tests/resources'
+        m = Memozo(base_path)
+
+        @m.pickle('pickle_test', protocol=pickle.HIGHEST_PROTOCOL)
+        def pickle_test_func():
+            return {'a': 3, 'b': 5}
+
+        expected = {'a': 3, 'b': 5}
+        actual = pickle_test_func()
+        self.assertTrue(actual == expected)
+
+        sha1 = utils.get_hash('pickle_test', 'pickle_test_func', '')
+        file_path = os.path.join(base_path, "{}_{}.{}".format('pickle_test', sha1, 'pickle'))
+        os.remove(file_path)
+
+    def test_data_cached_collectly(self):
+        # TODO(sotetsuk): WRITE THIS TEST
+        pass
+
+    def test_load_data_from_cache(self):
+        # TODO(sotetsuk): WRITE THIS TEST
+        pass

pip install -e .
parse_log_pytest
pytest
pytest
3.9
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
exceptiongroup @ file:///croot/exceptiongroup_1706031385326/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
-e git+https://github.com/sotetsuk/memozo.git@a0d0985f445279d2c0ae295e9488556cf6507f9f#egg=memozo
packaging @ file:///croot/packaging_1734472117206/work
pluggy @ file:///croot/pluggy_1733169602837/work
pytest @ file:///croot/pytest_1738938843180/work
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work

name: memozo
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - exceptiongroup=1.2.0=py39h06a4308_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - packaging=24.2=py39h06a4308_0
  - pip=25.0=py39h06a4308_0
  - pluggy=1.5.0=py39h06a4308_0
  - pytest=8.3.4=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py39h06a4308_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
prefix: /opt/conda/envs/memozo

tests/test_memozo.py::TestMemozoPickle::test_no_cache_output
tests/test_memozo.py::TestMemozoCall::test_args tests/test_memozo.py::TestMemozoCall::test_call tests/test_memozo.py::TestMemozoCall::test_doc_string tests/test_memozo.py::TestMemozoCall::test_set_name tests/test_memozo.py::TestMemozoGenerator::test_data_cached_collectly tests/test_memozo.py::TestMemozoGenerator::test_load_data_from_cache tests/test_memozo.py::TestMemozoGenerator::test_no_cache_output tests/test_memozo.py::TestMemozoPickle::test_data_cached_collectly tests/test_memozo.py::TestMemozoPickle::test_load_data_from_cache
memozo/memozo.py
memozo/memozo.py