'It\'s using **reference** on the given data dict object,
to avoid it copy it before updating!
``data`` **must** contain ``_id`` and ``_rev`` fields.
:param data: data to update'

def update(self, data):

    if ((not ('_rev' in data)) or (not ('_id' in data))):
        self.__not_opened()
        raise PreconditionsException("Can't    update    without    _rev    or    _id")
    _rev = data['_rev']
    try:
        _rev = bytes(_rev)
    except:
        self.__not_opened()
        raise PreconditionsException('`_rev`    must    be    valid    bytes    object')
    (_id, new_rev) = self._update_indexes(_rev, data)
    ret = {'_id': _id, '_rev': new_rev}
    data.update(ret)
    return ret
