2016-06-17 34 views
0

當我使用分片使用數組分配時,發生了一些奇怪的事情。的源代碼是下面:使用分片的陣列分配

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

從該結果的IDb一個是數組賦值後不同,但是當我更改b的值時,a中的值也發生了變化。爲什麼是這樣?

使用Sublime Text,Python 3.4.3。

+0

該鏈接是關於列表。這個問題是關於'numpy'數組的。 – hpaulj

+2

'a [:]'使'view'不是副本。 – hpaulj

+0

@hpaulj謝謝。你是對的。 Numpy數組與列表不同。 –

回答

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

+0

這是我找到的文件,正是你所說的。[docs.scipy.org/doc/numpy-dev/user/quickstart](https://docs.scipy.org/doc/numpy-dev/user/quickstart的.html) –