Python函数中如何修改list2而不改变list1?
如何在Python函数中修改list2的同时不改变list1?
问题出在你代码里的ls1 = ls——这只是把原列表的引用赋值给了ls1,两者指向内存中同一个列表对象,所以修改ls1时,原列表list1必然会跟着变化。
要实现修改副本不影响原列表,你需要先创建原列表的独立副本,再修改副本。以下是几种常用方法:
方法1:用切片创建副本
def change_list(ls): ls1 = ls[:] # 通过切片生成原列表的完整副本 ls1[1] = "?" return ls1 list1 = ['a', 'b', 'c', 'd'] list2 = change_list(list1) print(f"List 1 - {list1}") print(f"List 2 - {list2}")
方法2:用list()构造函数创建副本
def change_list(ls): ls1 = list(ls) # 利用list()构造新的列表副本 ls1[1] = "?" return ls1 list1 = ['a', 'b', 'c', 'd'] list2 = change_list(list1) print(f"List 1 - {list1}") print(f"List 2 - {list2}")
方法3:用copy模块的浅拷贝(适合嵌套列表场景)
如果你的列表包含嵌套的可变对象(比如列表里套列表),可以用copy.copy()做浅拷贝(深度拷贝用copy.deepcopy()):
import copy def change_list(ls): ls1 = copy.copy(ls) # 生成原列表的浅拷贝 ls1[1] = "?" return ls1 list1 = ['a', 'b', 'c', 'd'] list2 = change_list(list1) print(f"List 1 - {list1}") print(f"List 2 - {list2}")
以上代码运行后都会得到预期结果:
List 1 - ['a', 'b', 'c', 'd']
List 2 - ['a', '?', 'c', 'd']
内容的提问来源于stack exchange,提问作者junderhill1107
相关产品推荐
相关产品推荐

