unexpected behaviour with variables definition in python
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Variable assignment and modification (in python)
我刚刚注意到,python中的变量赋值有一些我没有预料到的行为。例如:
1 2 3 4 5 6 7 8 9 | import numpy as np A = np.zeros([1, 3]) B = A for ind in range(A.shape[1]): A[:, ind] = ind B[:, ind] = 2 * ind print 'A = ', A print 'B = ', B |
输出
a [ [ 0 ]。2。4。]
B=〔0〕。2。4。]
当我期待:
a=〔0〕1。2。]
B=〔0〕。2。4。]
如果我用"b=np.zeros([1,3])"替换"b=a",那么我就有了正确的选择。我无法在IPython终端中重现意想不到的结果。我在Scite 3.1.0中使用f5键运行代码得到了这个结果。我在Win7中使用的是python(x,y)2.7.2.3发行版。
1 | B = A |
使
使用
1 | B = A.copy() |
它会像期待的那样工作。
在您的代码中,
但是,这种情况也会发生在可变容器上,如列表或字典。为了避免这种情况,您可以使用以下方法之一:(取决于变量的复杂性)
1 2 3 | B = A[:] #makes a copy of only the first level of the mutable B = copy(A) #same as above, returns a 'shallow copy' of A B = deepcopy(A) #copies every element in the mutable, on every level |
注意,要使用
另见:这个问题