def imm_transient(imm):
    '''
    imm_transient(imm) yields a duplicate of the given immutable imm that is transient.
    '''
    if not is_imm(imm):
        raise ValueError('Non-immutable given to imm_transient')
    # make a duplicate immutable that is in the transient state
    dup = copy.copy(imm)
    if _imm_is_init(imm):
        # this is an initial-state immutable...
        _imm_init_to_trans(dup)
    elif _imm_is_persist(imm):
        # it's persistent; re-transient-ize this new one
        dd = object.__getattribute__(dup, '__dict__')
        dd['_pimms_immutable_is_trans'] = True
    return dup
imm_transient(imm) yields a duplicate of the given immutable imm that is transient.