code: def copy_object(self, source_bucket, source_object_name, dest_bucket=None,
                      dest_object_name=None, metadata={}, amz_headers={}):
          
          dest_bucket = dest_bucket or source_bucket
          dest_object_name = dest_object_name or source_object_name
          amz_headers["copy-source"] = "/%s/%s" % (source_bucket,
                                                   source_object_name)
          details = self._details(
              method=b"PUT",
              url_context=self._url_context(
                  bucket=dest_bucket, object_name=dest_object_name,
              ),
              metadata=metadata,
              amz_headers=amz_headers,
          )
          d = self._submit(self._query_factory(details))
          return d
docs: Copy an object stored in S3 from a source bucket to a destination
          bucket.
  
          @param source_bucket: The S3 bucket to copy the object from.
          @param source_object_name: The name of the object to copy.
          @param dest_bucket: Optionally, the S3 bucket to copy the object to.
              Defaults to C{source_bucket}.
          @param dest_object_name: Optionally, the name of the new object.
              Defaults to C{source_object_name}.
          @param metadata: A C{dict} used to build C{x-amz-meta-*} headers.
          @param amz_headers: A C{dict} used to build C{x-amz-*} headers.
          @return: A C{Deferred} that will fire with the result of request.