summaryrefslogtreecommitdiff
path: root/basics/opt/deep_copy_opt.py
blob: d537b159adfe7864cc919eaaa2c718dc61615b20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

_dispatcher = {}

def _copy_list(_l):
    ret = _l.copy()
    for idx, item in enumerate(ret):
        cp = _dispatcher.get(type(item))
        if cp is not None:
            ret[idx] = cp(item)
    return ret
_dispatcher[list] = _copy_list

def _copy_dict(d):
    ret = d.copy()
    for key, value in ret.items():
        cp = _dispatcher.get(type(value))
        if cp is not None:
            ret[key] = cp(value)

    return ret
_dispatcher[dict] = _copy_dict


if __name__ == '__main__':
    l = [1, 2, 3]
    _copy_list(l)