使用切片的数组赋值

时间:2016-06-17 14:10:14

标签: python arrays numpy

当我使用切片使用数组赋值时,发生了一些奇怪的事情。源代码如下:

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)

结果如下:

enter image description here

从结果来看, b id a 在数组赋值后有所不同,但是当我更改的值时b a 中的值也发生了变化。这是为什么?

使用Sublime Text,Python 3.4.3。

2 个答案:

答案 0 :(得分:1)

我认为您可能会遇到引用问题(b = a [:])。以下是可能有所帮助的先前答案:

Python objects confusion: a=b, modify b and a changes!

答案 1 :(得分:0)

使用列表,b=a[:]会复制a。对b的更改不会影响a或其值。

但是使用numpy数组时,此操作会生成viewb是一个新对象,但它共享底层数据缓冲区。 b中值的更改将影响a

使用b=b.copy()是否需要真实副本。

https://docs.scipy.org/doc/numpy-dev/user/quickstart.html#copies-and-views