diff options
Diffstat (limited to 'basics/opt')
| -rw-r--r-- | basics/opt/deep_copy_opt.py | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/basics/opt/deep_copy_opt.py b/basics/opt/deep_copy_opt.py new file mode 100644 index 0000000..d537b15 --- /dev/null +++ b/basics/opt/deep_copy_opt.py @@ -0,0 +1,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)
\ No newline at end of file |
