-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexample.py
More file actions
39 lines (29 loc) · 932 Bytes
/
Copy pathexample.py
File metadata and controls
39 lines (29 loc) · 932 Bytes
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
27
28
29
30
31
32
33
34
35
36
37
38
39
"""Shallow vs deep copy — aliasing and nested mutability."""
import copy
def show(label, obj):
print(f" {label}: {obj}")
if __name__ == "__main__":
original = [[1, 2], [3, 4]]
shallow = copy.copy(original)
deep = copy.deepcopy(original)
print("=== Before mutation ===")
show("original", original)
show("shallow", shallow)
show("deep", deep)
print("\n=== Mutate nested list in original ===")
original[0].append(99)
show("original", original)
show("shallow (affected!)", shallow)
show("deep (unchanged)", deep)
print("\n=== Assignment vs copy ===")
a = [1, 2, 3]
alias = a
copied = a.copy()
a.append(4)
print(f" alias: {alias}")
print(f" copied: {copied}")
print("\n=== deepcopy breaks cycles ===")
cyclic = []
cyclic.append(cyclic)
cloned = copy.deepcopy(cyclic)
print(f" cyclic is cloned[0]: {cloned is cloned[0]}")