code: def copy(self, memo=None, which=None):
          
          #raise NotImplementedError, "Copy is not yet implemented, TODO: Observable hierarchy"
          if memo is None:
              memo = {}
          import copy
          # the next part makes sure that we do not include parents in any form:
          parents = []
          if which is None:
              which = self
          which.traverse_parents(parents.append) # collect parents
          for p in parents:
              if not id(p) in memo :memo[id(p)] = None # set all parents to be None, so they will not be copied
          if not id(self.gradient) in memo:memo[id(self.gradient)] = None # reset the gradient
          if not id(self._fixes_) in memo :memo[id(self._fixes_)] = None # fixes have to be reset, as this is now highest parent
          copy = copy.deepcopy(self, memo) # and start the copy
          copy._parent_index_ = None
          copy._trigger_params_changed()
          return copy
docs: Returns a (deep) copy of the current parameter handle.
  
          All connections to parents of the copy will be cut.
  
          :param dict memo: memo for deepcopy
          :param Parameterized which: parameterized object which started the copy process [default: self]