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

Python中reverse()函数困惑:为何赋值后反转会同时改变两个列表?

问题解答

核心原因:Python列表是可变对象,赋值传递的是引用

在Python中,列表属于可变对象。当你执行temp = x这种赋值操作时,并没有创建新的列表副本,而是让temp和x两个变量指向内存中同一个列表对象——它们其实是同一个列表的不同“别名”。

所以调用temp.reverse()时,本质是对这个共享的列表执行反转操作,x作为同一个列表的别名,内容自然会跟着改变。这就是你测试代码里print(temp)和print(x)输出完全相同的原因。

为什么maf函数对所有输入都返回True?

拆解你的maf函数执行逻辑:

  1. temp = x让temp和x指向同一个列表;
  2. temp.reverse()直接修改了这个共享列表的内容,此时x的内容已经被反转;
  3. 最后判断temp == x,本质是在验证“同一个列表是否等于它自己”,这必然为True,和原列表是不是回文无关。

比如输入a = [17, 38, 10, 25, 72],反转后x变成[72,25,10,38,17],temp和x是同一个列表,所以相等返回True;而b是回文列表,反转后和原列表一致,当然也返回True。

如何修正这个问题?

如果想让temp成为原列表的独立副本,而非引用,常用方法有三种:

  • 切片语法:temp = x[:](切片会生成新的列表副本)
  • list()构造函数:temp = list(x)
  • copy模块:import copy; temp = copy.copy(x)

修正后的maf函数如下:

def maf(x):
    """ (list)->bool """
    temp = x[:]  # 创建原列表的独立副本
    temp.reverse()
    return temp == x  # 直接返回判断结果,简化代码

现在调用maf(a)会返回False,maf(b)返回True,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:45:34