【问题标题】:a=b seems to be the identiy, not a copy. Why? [duplicate]a=b 似乎是身份,而不是副本。为什么? [复制]
【发布时间】:2014-01-27 23:09:49
【问题描述】:

您好 Python/iPython 用户。

我发现使用 numpy 数组的 python 有一个奇怪的行为。我自己找到了解决问题的方法,但我很想得到解释。提前致谢。

问题来了: 使用 ipython 我创建了一个 numpy 数组 a 和 a 的副本,称为 b:

import numpy as np
a=np.zeros(5)
b=a

但是,b 似乎是 a 的标识,而不是副本,因为更改 b 也会更改 a。

b[0]=1
a
array([ 1.,  0.,  0.,  0.,  0.])

解决方案是使用b=a.copy() 而不是b=a,但我想了解为什么在python 中会出现这种情况。我对 Matlab、R 和 Fortran 非常熟悉,以前从未遇到过这样的问题。为什么有人想要为相同的数据使用第二个名称而不是该向量的副本?只是一些特定于 python 的语法,还是有更多需要理解的?

【问题讨论】:

标签: python arrays numpy copy


【解决方案1】:

它只是 python 的约定。除了为现有对象创建一个新句柄外,所有分配都不会做任何事情。这是一个非常明智的规则,因为它使语义保持简单和透明;在其他语言中,您可能经常想知道您是在修改现有对象,还是创建新对象的句柄。如果你想做一些事情而不是在现有对象上添加一个新名称,python 总是会强制你明确表示。至于你为什么要这样做:试着找到任何一段 python 代码,看看它包含多少个赋值语句。显然有它的用处;)。

【讨论】:

    猜你喜欢
    • 2013-10-07
    • 2019-10-27
    • 2015-11-20
    • 2014-12-04
    • 2014-03-29
    • 2021-10-06
    • 2011-08-10
    • 1970-01-01
    • 2018-11-22
    相关资源
    最近更新 更多