我这里有 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[:]
这会创建一个包含旧列表切片的列表,其中切片从开头开始,到结尾结束。换句话说,列表的完美副本。
