diff --git a/written.md b/written.md index 0128188..272be2f 100644 --- a/written.md +++ b/written.md @@ -21,3 +21,28 @@ 10. get() 返回 None,[] 抛 KeyError —— `user.get("city")` 键不存在返回 None(不报错),`user["city"]` 键不存在抛 KeyError。 +二、简答题 + +第 1 题:浅拷贝与深拷贝 + +```python +a = [[1, 2], [3, 4]] +b = a.copy() +import copy +c = copy.deepcopy(a) +``` + +三者关系: + +- `a`:原列表 `[[1, 2], [3, 4]]` +- `b = a.copy()`:浅拷贝,外层列表是新的,但内层列表还是和 a 共享的同一个对象(`b[0] is a[0]` 为 True) +- `c = copy.deepcopy(a)`:深拷贝,外层、内层全是独立的新对象(`c[0] is a[0]` 为 False) + +执行 `a[0].append(99)` 后: + +- `b` → `[[1, 2, 99], [3, 4]]`(因为 b[0] 和 a[0] 是同一个内层列表,一起变了) +- `c` → `[[1, 2], [3, 4]]`(c 的内层是独立副本,不受影响) + +原因:浅拷贝只复制最外层容器,内部元素仍是引用(指向同一对象);深拷贝会递归复制每一层,得到完全独立的对象。 + +