在编程中,当你更改一个列表(或其他可变数据结构)的值后,如果这个列表是在函数外部定义的,那么即使你在函数内部对这个列表进行了修改,当函数执行完毕后,这些修改依然会保留。但是,如果你在函数内部创建了一个新的列表副本并对它进行修改,那么原始列表的值是不会改变的。
如果你遇到更改列表值后,再次运行函数,该值重置为原始状态的情况,可能是因为以下几个原因:
list = [new values]
,这实际上是在函数内部创建了一个新的列表对象,并将局部变量 list
指向这个新对象,而原始的全局列表对象并没有被修改。下面是一个示例代码,演示了如何在函数内部修改全局列表,并避免上述问题:
# 全局列表
global_list = [1, 2, 3]
def modify_list(lst=None):
# 如果没有提供列表,则使用全局列表
if lst is None:
lst = global_list
else:
# 如果提供了列表,则复制一份进行操作,避免修改原始列表
lst = lst.copy()
# 修改列表
lst.append(4)
print("函数内部列表:", lst)
# 第一次调用,修改全局列表
modify_list()
print("全局列表:", global_list)
# 第二次调用,传递一个新列表
new_list = [5, 6, 7]
modify_list(new_list)
print("新列表:", new_list)
# 第三次调用,不传递参数,但全局列表已经被修改
modify_list()
print("全局列表:", global_list)
输出结果:
函数内部列表: [1, 2, 3, 4]
全局列表: [1, 2, 3, 4]
函数内部列表: [5, 6, 7, 4]
新列表: [5, 6, 7]
函数内部列表: [1, 2, 3, 4, 4]
全局列表: [1, 2, 3, 4, 4]
在这个例子中,我们通过检查 lst
是否为 None
来决定是否使用全局列表,并且在函数内部对列表进行操作时,我们使用了 .copy()
方法来创建列表的副本,这样就不会影响到原始的全局列表或其他传递进来的列表。
参考链接:
.copy()
方法:https://docs.python.org/3/tutorial/datastructures.html#more-on-lists领取专属 10元无门槛券
手把手带您无忧上云