Skip to main content
 首页 » 编程设计

Python:防止参数数组被全局修改

2025年05月04日21kevingrace

我这里有 python 的问题。如果我通过一个递归函数传递一个数组,该函数在每次调用时都会向数组添加一些内容,则该数组在每个实例中都会被修改

代码:

def test(n,myList): 
    if n>0: 
        myList.append("Test") 
        print ( "BEFORE CALL Instance ", n, myList ) 
        test(n-1,myList) 
        print ( "AFTER CALL Instance ", n, myList ) 
    else: 
        return 

通过 test(5,[]) 执行

结果:

BEFORE CALL Instance  5 ['Test'] 
BEFORE CALL Instance  4 ['Test', 'Test'] 
BEFORE CALL Instance  3 ['Test', 'Test', 'Test'] 
BEFORE CALL Instance  2 ['Test', 'Test', 'Test', 'Test'] 
BEFORE CALL Instance  1 ['Test', 'Test', 'Test', 'Test', 'Test'] 
AFTER CALL Instance  1 ['Test', 'Test', 'Test', 'Test', 'Test'] 
AFTER CALL Instance  2 ['Test', 'Test', 'Test', 'Test', 'Test'] 
AFTER CALL Instance  3 ['Test', 'Test', 'Test', 'Test', 'Test'] 
AFTER CALL Instance  4 ['Test', 'Test', 'Test', 'Test', 'Test'] 
AFTER CALL Instance  5 ['Test', 'Test', 'Test', 'Test', 'Test'] 

实际问题:

每个子函数都在修改所有父函数中的数组。我怎样才能避免这种情况?

将列表复制到一个新列表并修改它会产生与上面相同的输出

myListNew=myList 
myListNew.append("Test") 

请您参考如下方法:

您尝试的解决方案实际上并未复制数组。它为同一个数组分配一个新名称。如果你想创建一个新数组,试试这个:

my_new_list = my_list[:] 

这会创建一个包含旧列表切片的列表,其中切片从开头开始,到结尾结束。换句话说,列表的完美副本。