<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def reg_copy(reg, keys=None):
 """ Make a copy of a subset of a registry. :param reg: source registry :param keys: keys of registry items to copy :return: copied registry subset """

    if keys is None:
        keys = reg.keys()
    reg_cls = type(reg)
    new_reg = reg_cls()
    mk = {}  # empty dictionary for meta keys
    # loop over registry meta names
    for m in reg_cls.meta_names:
        mstar = getattr(reg, m, None)  # current value of metakey in registry
        if not mstar:
            # if there is no value, the value is empty or None, set it to None
            # it's never false or zero, should be dictionary of reg items
            mk[m] = None
            continue
        mk[m] = {}  # emtpy dictionary of registry meta
        # loop over keys to copy and set values of meta keys for each reg item
        for k in keys:
            kstar = mstar.get(k)
            # if key exists in registry meta and is not None, then copy it
            if kstar is not None:
                mk[m][k] = kstar
    new_reg.register({k: reg[k] for k in keys}, **mk)
    return new_reg