函数参数:即使通过值传递,原始变量也会被修改

2024-04-23 19:03:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,它基本上使用dijkstra的算法来计算图中的距离

def getDistances(q,start):

print(q)

q[start][0] = 0
queue = [start]
while len(queue):


    m = []


    mMin = queue[0]
    m = q[mMin][2]
    queue.remove(mMin)


    for x in q[m][3]:

        if q[x][1] == 0:

            if not x in queue:
                queue.append(x)

            if q[x][0] > q[m][0] + 1:

                q[x][0] = q[m][0] + 1

    q[m][1] = 1

return [x[0] for x in q]

但效果很好。但是,我不得不多次调用这个函数。“q”参数保持不变。以下是调用:

for ex in exits:
    dist = getDistances(list(qt),ex)
    distances.append([ex,dist])

“qt”本身是一个包含许多不同参数的列表。在这种情况下,我认为它没有问题本身那么重要。你知道吗

问题 如果在函数内部修改了“q”变量,则会修改“qt”变量。正如您在调用中看到的,我尝试使用list(qt)通过值而不是引用传递变量。 谢谢你的帮助!你知道吗


Tags: 函数infor参数ifqueuedistqt
2条回答

你也需要复制列表中的元素。例如:q[x][0] = q[m][0] + 1修改它们。执行:

dist = getDistances(list(list(e) for e in qt), ex)

必须创建^{}

from copy import deepcopy

dist = getDistances(deepcopy(qt), ex)

相关问题 更多 >