Python:覆盖两个变量

Python:覆盖两个变量,python,sorting,variables,overwrite,Python,Sorting,Variables,Overwrite,在使用python的过程中,我遇到了一个阻塞问题。我有一个函数,它应该对给定的整数向量进行一些简单的计算(并对其进行排序-我删除了这段代码以保持更清晰),然后返回一个新的。 主要问题是,每个内部循环的结果必须成为下一个循环的输入,但变量k和X在内存中似乎有相同的地址 函数如下所示: def SomeFunction(k, N): X = range(N); for i in range(N): for j in range(3): X[i]

在使用python的过程中,我遇到了一个阻塞问题。我有一个函数,它应该对给定的整数向量进行一些简单的计算(并对其进行排序-我删除了这段代码以保持更清晰),然后返回一个新的。 主要问题是,每个内部循环的结果必须成为下一个循环的输入,但变量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] ============================ 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应相同。有人知道如何解决这个问题吗?

当你说

k = X;
您没有将
X
的副本创建到
k
,而是将
X
k
指向同一列表。您可以像这样创建列表的副本

k = X[:]

注意:Python不期望
在这行的末尾。

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

我决定找一个答案来解释


Python默认情况下在类似这样的情况下使用引用。因此,您是对的,
X
k
基本上指向列表的同一个实例。您需要的是对内容进行深度复制。

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

k[:] = X[:]
试试这个:

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()

python不需要“;”作为一个线路终端或可能的复制品,我真的很难把它算作复制品。有很多问题的答案和根本问题都和这个问题一样。但我不确定是否应该考虑问题或问题,即使答案是。