gpt4 book ai didi

Python 作用域为 : I copied a list object in a function and modified the duplicate, 但原始内容已更改。为什么?

转载 作者:行者123 更新时间:2023-12-01 04:00:20 26 4
gpt4 key购买 nike

我正在编写一个简单的动态编程算法来用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com