From 912916a56b7f6469ce1c4cbf430f7c48ff918a3c Mon Sep 17 00:00:00 2001 From: zhang Date: Mon, 8 Aug 2022 22:46:45 +0800 Subject: copy --- basics/opt/deep_copy_opt.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 basics/opt/deep_copy_opt.py (limited to 'basics/opt/deep_copy_opt.py') 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 -- cgit v1.2.3