简答题第1题:浅拷贝与深拷贝
This commit is contained in:
+25
@@ -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 的内层是独立副本,不受影响)
|
||||
|
||||
原因:浅拷贝只复制最外层容器,内部元素仍是引用(指向同一对象);深拷贝会递归复制每一层,得到完全独立的对象。
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user