code: public void copy(Program that) {
        operatorSet.copy(that.operatorSet);
        variableSet.copy(that.variableSet);
        constantSet.copy(that.constantSet);
        depth = that.depth;
        length = that.length;
  
        if(that.root != null) {
           root = that.root.makeCopy(operatorSet, variableSet, constantSet);
        } else {
           root = null;
        }
     }
docs: / <param name="that">The GP to copy</param>