code: public <T> T copy (T object) {
  		if (object == null) return null;
  		if (copyShallow) return object;
  		copyDepth++;
  		try {
  			if (originalToCopy == null) originalToCopy = new IdentityMap();
  			Object existingCopy = originalToCopy.get(object);
  			if (existingCopy != null) return (T)existingCopy;
  
  			if (copyReferences) needsCopyReference = object;
  			Object copy;
  			if (object instanceof KryoCopyable)
  				copy = ((KryoCopyable)object).copy(this);
  			else
  				copy = getSerializer(object.getClass()).copy(this, object);
  			if (needsCopyReference != null) reference(copy);
  			if (TRACE || (DEBUG && copyDepth == 1)) log("Copy", copy, -1);
  			return (T)copy;
  		} finally {
  			if (--copyDepth == 0) reset();
  		}
  	}
docs: Returns a deep copy of the object. Serializers for the classes involved must support {@link Serializer#copy(Kryo, Object)}.
  @param object May be null.