为什么没有列表追加反映变量?

时间:2017-04-11 19:19:43

标签: python-3.x

这里发生了什么?我确信这是一个简单的解决方案/我忽视的事实。我无法理解为什么我不能以这种方式保存NumPy数组的值/更改。

>>> import numpy as np
>>> memoize = []
>>> parameters = np.array([1, 2]).astype(np.float64)
>>> memoize.append(parameters)
>>> parameters -= np.array([0.5, -0.5])
>>> memoize.append(parameters)
>>> memoize
[array([ 0.5,  2.5]), array([ 0.5,  2.5])]

我希望答案是

[array([ 1.,  2.]), array([ 0.5,  2.5])]

与列表是否可变有什么关系?

1 个答案:

答案 0 :(得分:1)

您遇到的问题是parameters是一个可变值,并且您在对其进行变更时附加多个引用。如果每次都将变量反弹到一个新数组,那么就没有问题了。

尝试更改

parameters -= np.array([0.5, -0.5])

parameters = parameters - np.array([0.5, -0.5])

原始版本对parameters进行了就地修改。第二个版本创建一个包含复制数据的新数组。这可能会慢一些,但在这种情况下它会做你想要的。