鱼C论坛

 找回密码
 立即注册
查看: 53|回复: 2

[新人报道] 关于列表问题

[复制链接]
发表于 前天 20:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
first = ['a','b']
second = first
first.append('c')
second = second + ['d']
print(first)

求解为什么second = second + ['d']
这一步不会影响到first
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 前天 20:34 | 显示全部楼层
问题解答:  
在这个问题中,我们需要分析 Python 对列表的操作机制以及它们是如何影响引用的。

核心分析  
  • 当执行 `first = []` 时,创建了一个空列表,变量 `first` 指向这个列表。  
  • 接着 `second = first`,此时 `second` 和 `first` 都指向同一个列表,它们是同一个对象。  
  • 执行 `first.append('c')` 后,由于 `append` 是直接在原列表上进行修改,因此此时 `[first]` 和 `[second]` 均受到影响,内容变为 `['c']`。  
  • 当你运行 `second = second + []` 时,`+` 操作符生成了一个新的列表对象,而不是修改原有的。这一步后,`second` 不再指向 `first` 所指的列表。  


关键原因  
`+` 操作符不改变原列表,而是新建一个列表返回,因此 `second` 的重新赋值只影响 `second`,而不会影响 `first`。

示例代码  
  
first = []
second = first
first.append('c')
second = second + []  # 注意:second被重新赋值为新对象

print(first)   # 输出 ['c']
print(second)  # 输出 ['c'],但已是新的对象
print(first is second)  # 输出 False,说明它们不再是同一个对象

总结  
- `append` 等操作修改原列表,会影响所有指向该列表的引用变量。  
- `+` 操作生成新对象,原列表不受影响,改变引用关系。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 20:55 | 显示全部楼层
2个不同列表怎么会互相影响呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-23 07:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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