当我使用切片使用数组赋值时,发生了一些奇怪的事情。源代码如下:
import numpy as np
a = np.array([1,2,3,4]).reshape(2,2)
b = np.array([5,6,7,8]).reshape(2,2)
print(id(a))
print(id(b))
b = a[:]
b[1,1] = 10
print(b is a)
print(id(a))
print(id(b))
print(a)
print(b)
结果如下:
从结果来看, b 的 id 和 a 在数组赋值后有所不同,但是当我更改的值时b , a 中的值也发生了变化。这是为什么?
使用Sublime Text,Python 3.4.3。
答案 0 :(得分:1)
我认为您可能会遇到引用问题(b = a [:])。以下是可能有所帮助的先前答案:
答案 1 :(得分:0)
使用列表,b=a[:]
会复制a
。对b
的更改不会影响a
或其值。
但是使用numpy
数组时,此操作会生成view
。 b
是一个新对象,但它共享底层数据缓冲区。 b
中值的更改将影响a
。
使用b=b.copy()
是否需要真实副本。
https://docs.scipy.org/doc/numpy-dev/user/quickstart.html#copies-and-views