'Deep copy the spec
:param dict copied:
Internal dictionary used for storing already copied values. This
parameter should not be used.
:return: New :py:class:`Spec` object that is a deep copy of ``self``.'

def copy(self, copied=None):

    copied = (copied or {})
    try:
        return copied[id(self)]
    except KeyError:
        instance = self.__class__()
        copied[id(self)] = instance
        return self.__class__()._update(self.__dict__, copied)
