Python中的PsuedoPointer功能

2024-05-17 15:36:58 发布

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

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

Tags: inforlendefrunsrange数组min
2条回答

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

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

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

f函数接收的array与声明为它的“外部”的f相同—事实上,f接收的所有内容都是对数组的引用,而不是它的副本—因此,在f内部对数组所做的任何修改都将自然地反映在外部。另外,值得一提的是,Python中的所有参数都得到passed by value,并且在该语言中没有指针或按引用传递这样的东西。你知道吗

不要覆盖原始数组。你知道吗

  def n_squared_runs(array):
        min_cut, length = 9999, len(array) ** 2
        for i in range(0, length):
            # perform operation on original input array
            new_array = contraction(array)
            if len(new_array) < min_cut:
                min_cut = len(new_array)
        return min_cut

相关问题 更多 >