考试报名
考试报名
考试内容
考试大纲
在线客服
返回顶部

备考刷题,请到

CDA认证小程序

下面这段代码运行后b是什么?a = [1, 2, 3, [1, 'a']]b = a.copy()a[-1][-1] = 0b
A. [1, 2, 3, 0]
B. [1, 2, 3, [1, 0]]
C. [1, 2, 3, [0, 0]
D. [1, 2, 3]
上一题
下一题
收藏
点赞
评论
题目解析
题目评论(0)

答案是:B: `[1, 2, 3, [1, 0]]`

### 专业分析:

在 Python 中,当我们使用 `a.copy()` 来创建列表 `a` 的一个副本 `b` 时,实际上执行的是一个 **浅拷贝**。

#### 概念回顾:
- **浅拷贝**(Shallow Copy):浅拷贝会创建一个新的列表对象,但其中的元素仍然是原始列表中元素的引用。这意味着如果列表中包含可变对象(例如另一个列表),浅拷贝不会递归复制这些可变对象,而是复制它们的引用。

#### 执行分析:
1. 初始赋值:
```python
a = [1, 2, 3, [1, 'a']]
```

2. 浅拷贝:
```python
b = a.copy()
```
此时,`a` 和 `b` 是两个独立的列表对象。对于像整数 `1`, `2`, `3` 这样的不可变对象来说,它们是直接复制的。但是,对于 `[1, 'a']` 这个子列表来说,`b` 中的这个子列表仅仅是 `a` 中子列表的引用。

3. 修改列表 `a`:
```python
a[-1][-1] = 0
```
这里的 `a[-1]` 取的是子列表 `[1, 'a']`。`a[-1][-1]` 实际指向字符串 `'a'`。我们将其改为 `0`,因此 `a` 变为了 `[1, 2, 3, [1, 0]]`。

由于 `b` 中的最后一个元素引用的是与 `a` 相同的子列表,因此这一修改也对 `b` 产生了影响。最终,`b` 变成 `[1, 2, 3, [1, 0]]`。

因此,正确答案是:B: `[1, 2, 3, [1, 0]]`。