鱼C论坛

 找回密码
 立即注册
查看: 315|回复: 6

[快问快答] 第023讲:列表(V)

[复制链接]
发表于 2025-10-24 07:04:57 | 显示全部楼层 |阅读模式
购买主题 本主题需向作者支付 5 鱼币 才能浏览
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-10-24 18:39:38 | 显示全部楼层
@FishC 以下代码中,哪一行会改变两个变量指向的内容?

matrix = [[1, 2], [3, 4]]
copy_matrix = matrix.copy()
matrix[0] = [5, 6]  # 行1
matrix[1][0] = 7  # 行2

A. 只有行1
B. 只有行2
C. 行1和行2都会
D. 都不会
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-10-24 18:41:01 | 显示全部楼层
清源兮 发表于 2025-10-24 18:39
@FishC 以下代码中,哪一行会改变两个变量指向的内容 ...


答案是 B. 只有行2

解释:
matrix.copy() 是浅拷贝,因此 copy_matrixmatrix 共享内部列表的引用。

- 行1:matrix[0] = [5, 6] 只修改了 matrix 的第一个元素,使其指向新列表,但 copy_matrix 仍指向原始列表,因此不影响 copy_matrix
- 行2:matrix[1][0] = 7 修改了共享的内部列表 [3, 4],由于 copy_matrix[1] 也指向同一列表,因此两个变量都看到改变。

所以,只有行2会改变两个变量指向的内容。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-20 15:15:16 | 显示全部楼层
@FishC 执行以下代码后,check 的值是?

import copy
data = [{'a': [1, 2]}, {'b': [3, 4]}]
backup = copy.copy(data)
check = backup[0] is data[0]

A. True
B. False
C. None
D. 报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-20 15:16:05 | 显示全部楼层
qwerty2200 发表于 2025-11-20 15:15
@FishC 执行以下代码后,check 的值是?

import co ...


执行以上代码后,check 的值为 True,因此正确答案是 A。

解释:
copy.copy() 执行浅拷贝。对于列表 data,backup 是 data 的一个浅拷贝,这意味着 backup 是一个新的列表对象,但其中的元素(即字典)仍然是原 data 列表中的相同对象。因此,backup[0] is data[0] 比较的是同一个字典对象,返回 True。

代码示例:

  1. import copy
  2. data = [{'a': [1, 2]}, {'b': [3, 4]}]
  3. backup = copy.copy(data)
  4. check = backup[0] is data[0]  # check 为 True
复制代码


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-20 15:16:07 | 显示全部楼层
@FishC 执行以下代码,会输出什么?

a = [[]] * 3
a[0].append('FishC')
print(a)

A. [['FishC'], [], []]
B. [['FishC']]
C. [['FishC'], ['FishC'], ['FishC']]
D. 代码会报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-11-20 15:17:00 | 显示全部楼层
qwerty2200 发表于 2025-11-20 15:16
@FishC 执行以下代码,会输出什么?

a = [] * 3
a ...


输出是 C. [['FishC'], ['FishC'], ['FishC']]

解释:
代码 a = [[]] * 3 创建了一个列表,其中包含三个引用到同一个空列表的元素。因此,当执行 a[0].append('FishC') 时,实际上是在修改这个共享的列表,导致所有三个位置都显示追加后的内容。最终 print(a) 输出三个都包含 'FishC' 的子列表。

示例代码:
  1. a = [[]] * 3
  2. a[0].append('FishC')
  3. print(a)  # 输出: [['FishC'], ['FishC'], ['FishC']]
复制代码


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-12 11:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表