# Python列表的append与extend

## 定义

`a.append(b)` 将`b`整体作为一个元素添加到列表末尾；`a.extend(b)` 遍历`b`并将其中元素逐个添加。`append`可以接收任意对象，`extend`需要可迭代对象。两者都原地修改列表并返回`None`。

## 例子

**`append`与`extend`的区别**

```python title="append-extend.py"
a = [1, 2]
a.append([3, 4])
print(a)   # [1, 2, [3, 4]]

b = [1, 2]
b.extend([3, 4])
print(b)   # [1, 2, 3, 4]
```

## 交互探索

对同一个列表参数切换两种方法，比较最终列表的结构和长度。

交互演示：添加列表时是加入一个元素还是展开？。比较\`append\`与\`extend\`处理同一列表参数的结果。 请在站点操作演示。

## 练习

1. 设`a = [1, 2]`，执行`b = a.append(3)` 后，`b`的值是：

   * A.  `None`
   * B.  `[1, 2, 3]`
   * C.  `3`
   * D.  抛出异常

   答案：A

   `append()` 原地修改列表并返回`None`，所以`b`是`None`，而`a`变成 `[1, 2, 3]`。

2. 对`a = [1, 2]` 调用`a.extend([3, 4])` 后，`a`的值是：

   * A.  `[1, 2, 3, 4]`
   * B.  `[1, 2, [3, 4]]`
   * C.  `[3, 4]`
   * D.  `None`

   答案：A

   `extend`把列表中的元素逐个追加，得到 `[1, 2, 3, 4]`；如果写成`append`，结果会是 `[1, 2, [3, 4]]`。

3. 关于这几个函数与方法，下列说法正确的是：

   * A.  `append`把参数整体作为一个元素加入列表
   * B.  `extend`的参数必须是可迭代对象
   * C.  `append`与`extend`都返回`None`
   * D.  `extend`会返回一个新列表

   答案：A、B、C

   `extend`原地修改列表并返回`None`，不会创建新列表，D错。
