当前位置: 动力学知识库 > 问答 > 编程问答 >

python - array assignment using slicing

问题描述:

When I was using array assignment using slicing, there is some thing strange happened. The source code is below:

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)

The result is given as:

From the result, the id of b and a is different after array assignment, but when I change the value of b, the value in a also changed. Why is this?

Using Sublime Text, Python 3.4.3.

网友答案:

With lists, b=a[:] makes a copy of a. Changes to b will not affect a or its values.

But with an numpy array, this action makes view. b is a new object, but it shares the underlying data buffer. Changes to values in b will affect a.

Use b=b.copy() is you want a true copy.

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

网友答案:

I think you might have an issue with referencing (b=a[:]). Here is a previous answer that might help:

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

分享给朋友:
您可能感兴趣的文章:
随机阅读: