【问题标题】:What is this issue of variable affectation in python? [duplicate]python中变量影响的这个问题是什么? [复制]
【发布时间】:2015-02-28 06:11:21
【问题描述】:

我在 python 中遇到了这个问题。我有一个接受以下输入的函数

import numpy;
from numpy import *;
def GetInf(G, X, m, n):
    g           = G[m - 1, :].T;
    Y           = X;
    Y[m - 1, :] = 0;
    Y[:, n - 1] = 0;
    # Here I modify Y. The problem is that X is modified too. Why?
    # In fact, I add Y after I see that X is changing but X keeps changing.
    result      =  sum(Y * G);
    return result;

G = array([[1., 2., 3.], [4., 5., 6.]]);
X = array([[1., 0., 0.], [0., 0., 1.]]);
I = GetInf(G, X, 1, 1);

我的问题是我在调试程序的时候看到修改Y后,X也被修改了。我不明白为什么。

【问题讨论】:

  • YX 是指向同一个对象的名称,如果您想要复制,请执行以下操作:Y = X.copy()
  • 您将 X 分配给 Y 变量。它与复制矩阵不同,而是分配矩阵对象本身。所以改变 x 和改变 y 是一样的。尝试拨打Y = x.copy()
  • 这是一篇解释变量赋值如何在 python 中工作的博客文章。 foobarnbaz.com/2012/07/08/understanding-python-variables
  • 离题,但做作并不意味着你认为它会做什么:自命不凡并旨在给人留下深刻印象的行为、言论或写作。

标签: python arrays numpy matrix


【解决方案1】:

因为您将 X 分配给 Y 。这意味着Y 是对X 的引用!如果您不想这样做,则必须复制X

Y=np.copy(X)

【讨论】:

    猜你喜欢
    • 2020-01-12
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多