我想在一个顶点数组上运行收缩算法n ^ 2次,以便计算图形的最小切割。在第一次for循环迭代之后,数组被改变,剩下的迭代使用改变的数组,这不是我想要的。 如何模拟指针以便在每次for循环迭代期间拥有原始输入数组?
def n_squared_runs(array):
min_cut, length = 9999, len(array) ** 2
for i in range(0, length):
# perform operation on original input array
array = contraction(array)
if len(array) < min_cut:
min_cut = len(array)
return min_cut
答案 0 :(得分:1)
contraction()
操作应该创建并返回一个新数组,而不是将它接收的数组作为参数就地修改 - 你也应该为返回的数组使用不同的变量名, 如果使用array
命名参数和局部变量,该参数将被覆盖在函数内。
这与指针无关,而是与正在使用的函数的契约有关。如果必须保留原始array
,则辅助函数需要确保强制执行此限制。请注意,在Python中,如果您这样做:
array = [1, 2, 3]
f(array)
array
函数收到的f
与“外部”声明的相同 - 事实上,f
收到的所有内容都是引用到数组,而不是它的副本 - 所以,你在f
内对阵列进行的任何修改都会在外面反映出来。此外,值得指出的是,Python中的所有参数都得到passed by value,并且没有指针或通过语言中的引用传递。