Copies vs Views
This is one of the trickiest parts of NumPy. Think of it like sharing a document - is it a link to the same file, or a separate copy?
Views Share Data
Many NumPy operations return views, not copies. Changes to the view affect the original array.
import numpy as np
original = np.array([1, 2, 3, 4, 5])
view = original[1:4]
print(f"Original: {original}")
print(f"View: {view}")
view[0] = 99
print(f"Modified view: {view}")
print(f"Original changed: {original}")
See that? Changing the view changed the original! That's because view is just a different way to look at the same data.
Copies Are Independent
Use copy() to create an independent copy.
import numpy as np
original = np.array([1, 2, 3, 4, 5])
copy = original.copy()
copy[0] = 99
print(f"Original: {original}")
print(f"Copy: {copy}")
Here is the thing - copy() uses more memory because you're duplicating data. But sometimes you need that independence.
How to Tell If It's a View
Check the base attribute. If it's None, it's an independent array.
import numpy as np
original = np.array([1, 2, 3])
view = original[:]
copy = original.copy()
print(f"View base: {view.base}")
print(f"Copy base: {copy.base}")
One thing that confused me at first was reshaping. reshape() usually returns a view, but flatten() returns a copy.
Try it Yourself →Key Takeaways
- Views share data with the original array
- Copies are independent and use more memory
- Many operations return views (slicing, reshape)
- Use .copy() when you need independence