docs: def copy(self, bucket=None, key=None):
          """Copy an object version to a given bucket + object key.
  
          The copy operation is handled completely at the metadata level. The
          actual data on disk is not copied. Instead, the two object versions
          will point to the same physical file (via the same FileInstance).
  
          All the tags associated with the current object version are copied over
          to the new instance.
  
          .. warning::
  
             If the destination object exists, it will be replaced by the new
             object version which will become the latest version.
  
          :param bucket: The bucket (instance or id) to copy the object to.
              Default: current bucket.
          :param key: Key name of destination object.
              Default: current object key.
          :returns: The copied object version.
          """
          new_ob = ObjectVersion.create(
              self.bucket if bucket is None else as_bucket(bucket),
              key or self.key,
              _file_id=self.file_id
          )
  
          for tag in self.tags:
              ObjectVersionTag.create_or_update(object_version=new_ob,
                                                key=tag.key,
                                                value=tag.value)
  
          return new_ob