作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个简单的动态编程算法来用 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
另请参阅此链接以获取浅复制与深复制的更多说明:What is the difference between a deep copy and a shallow copy?
你所做的是浅拷贝,你需要的叫做深拷贝。
关于Python 作用域为 : I copied a list object in a function and modified the duplicate, 但原始内容已更改。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36667073/
我是一名优秀的程序员,十分优秀!