Create a copy and not a reference of a NumPy array
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.
Related videos on Youtube
Gykonik
Updated on September 16, 2022Comments
-
Gykonik over 1 year
I'm trying to make a Python program with NumPy, but I ran into a problem:
width, height, pngData, metaData = png.Reader(file).asDirect() planeCount = metaData['planes'] print('Bildgroesse: ' + 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
This is my code, to read in a PNG image. Now I want to edit
imageEdited_3d
but NOTimageOriginal_3d
, like this:imageEdited_3d[x,y,0] = 255
But then the
imareOriginal_3d
variable has the same values as theimageEdited_3d
one...Does anyone know, how I can fix this? So it doesn't only creates a reference, but it creates a real copy? :/
-
monolith over 6 yearsIs there a notable difference in time consumption when constructing a deep copy versus shallow copy?
-
taper about 6 years@wedran There is indeed. Deepcopy is much more time consuming! Try this gist