summaryrefslogtreecommitdiff
path: root/basics
diff options
context:
space:
mode:
Diffstat (limited to 'basics')
-rw-r--r--basics/opt/deep_copy_opt.py26
-rw-r--r--basics/python_basics.py3
2 files changed, 29 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
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()