Python:覆盖两个变量
在使用python的过程中,我遇到了一个阻塞问题。我有一个函数,它应该对给定的整数向量进行一些简单的计算(并对其进行排序-我删除了这段代码以保持更清晰),然后返回一个新的。 主要问题是,每个内部循环的结果必须成为下一个循环的输入,但变量k和X在内存中似乎有相同的地址 函数如下所示: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]
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不需要“;”作为一个线路终端或可能的复制品,我真的很难把它算作复制品。有很多问题的答案和根本问题都和这个问题一样。但我不确定是否应该考虑问题或问题,即使答案是。