Python中的伪指针功能

时间:2013-07-27 18:35:47

标签: python arrays pointers python-2.7 for-loop

我想在一个顶点数组上运行收缩算法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

1 个答案:

答案 0 :(得分:1)

contraction()操作应该创建并返回一个新数组,而不是将它接收的数组作为参数就地修改 - 你也应该为返回的数组使用不同的变量名, 如果使用array命名参数和局部变量,该参数将被覆盖在函数内。

这与指针无关,而是与正在使用的函数的契约有关。如果必须保留原始array,则辅助函数需要确保强制执行此限制。请注意,在Python中,如果您这样做:

array = [1, 2, 3]
f(array)

array函数收到的f与“外部”声明的相同 - 事实上,f收到的所有内容都是引用到数组,而不是它的副本 - 所以,你在f内对阵列进行的任何修改都会在外面反映出来。此外,值得指出的是,Python中的所有参数都得到passed by value,并且没有指针或通过语言中的引用传递。