Python列表拼接自身反向副本时原列表被意外修改问题求解
问题原因
Python中的列表属于可变对象,代码中reversel = list的写法没有生成新的列表副本,只是给原输入列表新增了一个变量引用,两个变量指向内存中完全相同的列表对象。因此调用reversel.reverse()执行原地反转操作时,原列表也会同步被修改,最终导致结果不符合预期。
另外注意不要用list作为参数名,它是Python内置的类型关键字,用作参数会覆盖原生功能,建议改为input_list这类自定义名称。
修复方案
这里提供两种常用的简洁实现方式:
方案1:复制原列表后反转
先创建原列表的浅拷贝,对拷贝后的对象执行反转操作,再拼接到原列表:
def mirror(input_list): # 生成原列表的浅拷贝 reversel = input_list.copy() reversel.reverse() input_list.extend(reversel) return input_list test = ["alpha", "beta"] print(mirror(test))
方案2:使用反向切片直接生成反转副本
利用列表切片特性直接生成反转后的新列表,无需单独执行反转操作,代码更简洁:
def mirror(input_list): return input_list + input_list[::-1] test = ["alpha", "beta"] print(mirror(test))
两种方案的输出均符合预期:
['alpha', 'beta', 'beta', 'alpha']
内容的提问来源于stack exchange,提问作者Keegry
相关产品推荐
相关产品推荐

