Create a copy and not a reference of a NumPy array

copy, numpy, python

Solution

You need to create the copy of the object. You may do it using `numpy.copy()` since you are having `numpy` object. Hence, your initialisation should be like:

imageEdited_3d = imageOriginal_3d.copy()

Also there is `copy` module for creating the deep copy OR, shallow copy. This works independent of object type. For example, your code using `copy` should be as:

from copy import copy, deepcopy

# Creates shallow copy of object
imageEdited_3d = copy(imageOriginal_3d)

# Creates deep copy of object
imageEdited_3d = deepcopy(imageOriginal_3d)

Description:

A shallow copy constructs a new compound object and then (to the extent possible) inserts references into it to the objects found in the original.

A deep copy constructs a new compound object and then, recursively, inserts copies into it of the objects found in the original.

Problem

I'm currently working on a Python program that involves using NumPy for image processing. However, I've encountered an issue when trying to create a deep copy of a NumPy array instead of just copying the reference. Here's a snippet of my code, where I read in a PNG image and assign it to `imageOriginal_3d`: ``` width, height, pngData, metaData = png.Reader(file).asDirect() planeCount = metaData['planes'] print('Image Size: ' + str(width) + 'x' + str(height) + ' Pixel') image_2d = np.vstack(list(map(np.uint8, pngData))) imageOriginal_3d = np.reshape(image_2d, (width, height, planeCount)) imageEdited_3d = imageOriginal_3d // TODO: CREATE DEEP COPY ``` My intention is to edit `imageEdited_3d` without affecting the values in `imageOriginal_3d`. However, when I modify `imageEdited_3d`, the changes currently also appear in `imageOriginal_3d`.

Original source