我有一个需要接受名为edge的列表的函数。我需要预先形成许多循环,并在每个循环上更改边的属性值。在下一个循环的开始,我需要边缘取其原始值。为了尝试解决这个问题,我将我的列表作为一个元组投射,因此它不会变为可变并将其分配给permEdges。然后我从permEdges初始化trialEdges,以便我可以对trialEdges进行更改。 trialEdges的更改将在下一个循环中保持不变,我不知道为什么。
如果有人能够解释为什么输出不一致以及如何在每个循环开始时实现这个目标,我会永远感激:)
def randomMinCut(edges):
permEdges = tuple(edges)
tries = 3
for i in xrange(tries):
trialEdges = list(permEdges)
print trialEdges
trialEdges[0][0] = 100
return
示例输入和输出:
input:
[[1, 2], [1, 3], [1, 4], [1, 7]]
output:
[[1, 2], [1, 3], [1, 4], [1, 7]]
[[100, 2], [1, 3], [1, 4], [1, 7]]
[[100, 2], [1, 3], [1, 4], [1, 7]]
第一行是我想重复3次
答案 0 :(得分:4)
permEdges
可能是元组,但其内容不是;请记住,permEdges
和trialEdges
都存储指向四个双元素列表的指针。当您设置trialEdges[0][0] = 100
时,您修改但替换 trialEdges
的第一个元素,这也是{{1}的第一个元素}}
有几种方法可以达到你想要的效果,但copy.deepcopy
可能是最好的:
permEdges