我在这里遇到了python的问题。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")
+1 - 没错,只是改变为'测试(N-1,myList中[:])' – sberry 2010-01-26 18:52:48
是否有关于阵列(字典)这样做太一些解决方法吗?它说“不可能的类型”。 – lamas 2010-01-26 18:54:08
检出库中的复制模块:'another_d = copy.copy(d)'。或者尝试'another_d = dict(d)'。 – jcdyer 2010-01-26 19:01:06