【发布时间】:2015-05-28 10:52:13
【问题描述】:
因此,使用 numpy 数组将一个分配给另一个只是复制引用: 即
import numpy as np
x = np.array([5,8])
y = x
y += 1
x
Out: array([6, 9])
如果我想要一个深拷贝,那么我应该使用x.copy()。从更高维数组中获取视图时也是如此,例如
A=np.array([[4,10],[8,1]])
b=A[:,1]
b+=1
A
Out: array([[ 4, 11],
[ 8, 2]])
反过来(从上面继续):
A[:,1]=b
b
Out: array([11, 2])
b+=1
A
Out: array([[ 4, 12],
[ 8, 3]])
所以到目前为止,一切都在持续运行。但现在如果我继续做:
A[:,0] = b
A
Out: array([[12, 12],
[ 3, 3]])
b
Out: array([12, 3])
b+=1
A
Out: array([[12, 13],
[ 3, 4]])
我不明白为什么第一列保持不变而另一列没有?为什么第二列继续指向b数组?是否有任何规则可以决定何时在赋值时对数组进行深度复制?
【问题讨论】:
-
我不知道python,但它看起来像c++指针。您可以将 1 个内存空间分配给多个变量(就像许多变量读取相同的内存指针)而不是 1 个变量分配给多个内存空间(1 个 var 读取多个内存指针)