Source code for dantro._copy
"""Custom, optimized copying functions used thoughout dantro"""
import copy
import pickle as _pickle
from typing import Any
# -----------------------------------------------------------------------------
_shallowcopy = copy.copy
"""An alias for a shallow copy function used throughout dantro, currently
pointing to :py:func:`copy.copy`.
"""
[docs]def _deepcopy(obj: Any) -> Any:
"""A pickle-based deep-copy overload, that uses :py:func:`copy.deepcopy`
only as a fallback option if serialization was not possible.
Calls :py:func:`pickle.loads` on the output of :py:func:`pickle.dumps` of
the given object.
The pickling approach being based on a C implementation, this can easily
be many times faster than the pure-Python-based :py:func:`copy.deepcopy`.
"""
try:
return _pickle.loads(_pickle.dumps(obj))
except:
return copy.deepcopy(obj)