Python:覆盖两个变量

时间:2014-01-02 08:45:38

标签: python sorting variables overwrite

在我使用python的过程中,我遇到了一个阻塞问题。我有一些SomeFunction应该做一些简单的计算(并且还要对它进行排序 - 我删除那段代码以使其更清晰)在整数给定的向量上并返回新的。 主要问题是,每个内部循环的结果必须成为下一个的输入,但变量k和X似乎在内存中具有相同的地址。

功能如下:

def SomeFunction(k, N):
    X = range(N);
    for i in range(N):
        for j in range(3):
            X[i] = k[i]*2;
        print "X:";
        print X;
        print "k -> :";
        print k
        k = X;
        print "============================";
    return k;

并产生输出:

    X:
    [0, 1, 2, 3, 4, 5, 6, 7]
    k -> :
    [0, 1, 2, 3, 4, 5, 6, 7]
    ============================

    X:
    [0, 8, 2, 3, 4, 5, 6, 7]
    k -> :
    [0, 8, 2, 3, 4, 5, 6, 7]
    ============================

第一个循环的输出没问题,因为第一个元素是0,但是对于其余的循环,你可以看到问题。 X应该有新值,而k应该是相同的。有谁知道如何解决这个问题?

4 个答案:

答案 0 :(得分:5)

当你说

k = X;

您没有在X中创建k的副本,但您要使Xk指向同一列表。您可以像这样创建列表的副本

k = X[:]

注意: Python不希望行尾有;

答案 1 :(得分:2)

您可以使用切片表示法将数组内容复制到另一个,保留列表ID:

k[:] = X[:]

答案 2 :(得分:1)

试试这个:

def SomeFunction(k = range(8),N=8):
    X = range(N)
    for i in range(N):
        for j in range(3):
            X[i] = k[i]*2
        print "X:"
        print X
        print "k -> :"
        print k
        k = X[:]
        print("============================")
    return k

SomeFunction()

答案 3 :(得分:-1)

我不确定这是否应该作为答案或评论发布,但这完全涵盖了您的问题:python list by value not by reference

我决定给出解释的答案。

默认情况下,Python在这种情况下使用引用。所以你是对的,Xk实际上指向列表的同一个实例。你想要的是制作内容的深层副本。