我正在编写一个简单的动态编程算法来遍历Python中的矩阵。由于我不了解Python的作用域规则,我很难修复这个错误。
这是我代码的一部分:
# a new null matrix.
footstep = []
for i in range(size):
row = [0]*size
footstep.append(row)
def min_val(m, n, footstep):
# copy a new footstep 2D-matrix.
fs = list(footstep)
if ((m == 0) and (n == 0)):
print "origin"
return get_grid(0, 0)
......
......
......
return (min(min_val(m-1, n, fs), min_val(m, n-1, fs)
print min_val(4, 4, footstep)
print footstep
在函数调用开始时,我复制了一个新的相同足迹列表。因此,我的期望是:全局范围内的足迹列表一定没有改变。
我应该如何修复我的代码?请帮忙。
您通过将旧列表的所有元素添加到列表中来复制列表。因此,虽然列表本身是新的,但其中的元素仍然指向相同的对象。
若要解决此问题,请在复制过程中分别为阵列中的每个对象创建一个副本。
示例(伪代码):
你在哪里做这个
footstep = []
for i in range(size):
row = [0]*size
footstep.append(row)
你需要做一些类似的事情
for each element in the old array
create a copy of the old element
you may need to implement some copy() method which makes a copy of your object
add the copy to the new array
另请参阅此链接了解浅副本与深副本的更多解释:深副本和浅副本之间的区别是什么?
你所做的是一个肤浅的复制,你所需要的被称为深度复制。