【问题标题】:Python variable should not change, but it changed? [duplicate]Python变量不应该改变,但它改变了吗? [复制]
【发布时间】:2017-08-02 14:49:46
【问题描述】:

我在下面的代码中有一个变量的奇怪行为。

为什么最后w3的输出和w2一样?代码里从来没改过,最后还是和w2一样的值?

import numpy as np

inpt = np.array([[1]])

w1 = np.random.random((1,1))
w2 = np.random.random((1,1))

w3 = w2

print("First w3: ", w3)

n1 = np.dot(inpt, w1)
n2 = np.dot(n1, w2)

delta = 1 - n2

n1_d = np.dot(delta, w2.T)

w2 += np.dot(n1.T, delta)
w1 += np.dot(inpt.T, n1_d)

print("Second w3: ", w3)

print("Value of w2: ", w2)

第一个 w3:[[ 0.98377014]]

第二个 w3:[[ 1.01105407]]

w2 的值:[[ 1.01105407]]

我在这里做错了什么?

【问题讨论】:

  • 不是 python 专家,所以我可能错了。是因为 w3 只是对 w2 的引用吗?所以当你改变 w3 时,w2 引用的 w3 的新值。它在此行之后更改w2 += np.dot(n1.T, delta)
  • 使用w3 = np.copy(w2)
  • 您似乎不清楚 Python 变量和赋值是如何工作的。这是handy guide
  • 这篇文章可能对您有所帮助:Facts and myths about Python names and values,由 SO 资深人士 Ned Batchelder 撰写。
  • 还有一些很好的相关信息here。这个问题是关于普通 Python 列表的,但大部分信息适用于 Python 中的任何可变对象。

标签: python numpy


【解决方案1】:

w3 只是对w2 的引用,因此当您更新w2 时它将反映w2 的变化

【讨论】:

    猜你喜欢
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 2021-01-08
    • 1970-01-01
    • 2014-05-28
    • 2021-12-22
    相关资源
    最近更新 更多