You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中copy()与remove(i)同写一行失效、拆分两行正常的原因咨询

两个程序输出不同的核心原因

这是Python列表remove()方法的返回值特性导致的:所有直接修改列表本身的内置方法(包括remove()/append()/sort()/reverse()等),都没有返回值,默认返回None。

程序1的执行逻辑

  • 代码中x.copy().remove(i)的执行顺序是:
    1. 先执行x.copy()生成一个x的副本临时列表
    2. 直接在这个临时列表上调用remove(i)方法,方法执行后会修改临时列表的内容,但返回值为None
    3. 你把remove()的返回值None赋值给了temp,所以最终打印的全是None
  • 那个被修改过的临时列表因为没有被任何变量引用,执行完就被系统回收了,你无法拿到它的内容。

程序2的执行逻辑

  • 你先把x.copy()生成的新列表赋值给temp变量,temp持有这个新列表的引用
  • 再调用temp.remove(i),虽然这个方法依旧返回None,但你没有用它的返回值覆盖temp,而是直接修改了temp指向的列表本身的内容
  • 最终打印temp的时候,输出的就是修改后的列表,符合预期。

单行实现相同逻辑的方案(Python 3.8+支持海象运算符的场景下)

for i in d:
    (temp := x.copy()).remove(i)
    print(temp)

该写法可以得到和程序2完全一致的输出。


内容的提问来源于stack exchange,提问作者huzy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:30:00