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 ++++++++++++++++++++++++++ basics/python_basics.py | 3 +++ 2 files changed, 29 insertions(+) create mode 100644 basics/opt/deep_copy_opt.py (limited to 'basics') 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 diff --git a/basics/python_basics.py b/basics/python_basics.py index bf780cc..34b43e2 100644 --- a/basics/python_basics.py +++ b/basics/python_basics.py @@ -1,4 +1,6 @@ +import copy + def check_num_id(i): a = i b = i @@ -8,3 +10,4 @@ def check_num_id(i): if __name__ == '__main__': for i in range(200, 260): check_num_id(i) + copy.deepcopy() -- cgit v1.2.3