Deepcopy of a canvas?
Hello!
OK so I am trying to copy a canvas (to be able to use how a stimulus look like during the instruction).
So what I do:
- define my canvas at the very beginning of the experiment;
- copy these canvas into other ones and changing some elements (i.e. adding text).
I was not familiar with shallow and deepcopy and apparently that is the issue I have: when I modify the copy of a canvas it also modify the original one.
So well I tried to use deepcopy but then I got an error:
Canvas_Instruction_Example_Left_Congruent = deepcopy(var.Canvas_Arrow_Congruent_Left)
and I got this traceback:
Traceback:
File "C:\Program Files (x86)\OpenSesame\lib\site-packages\libopensesame\inline_script.py", line 96, in run
self.experiment.python_workspace._exec(self.crun)
File "C:\Program Files (x86)\OpenSesame\lib\site-packages\libopensesame\python_workspace.py", line 174, in _exec
exec(bytecode, self._globals)
Inline script, line 1, in <module>
File "C:\Program Files (x86)\OpenSesame\lib\copy.py", line 190, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "C:\Program Files (x86)\OpenSesame\lib\copy.py", line 334, in _reconstruct
state = deepcopy(state, memo)
File "C:\Program Files (x86)\OpenSesame\lib\copy.py", line 163, in deepcopy
y = copier(x, memo)
File "C:\Program Files (x86)\OpenSesame\lib\copy.py", line 257, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "C:\Program Files (x86)\OpenSesame\lib\copy.py", line 190, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "C:\Program Files (x86)\OpenSesame\lib\copy.py", line 334, in _reconstruct
state = deepcopy(state, memo)
File "C:\Program Files (x86)\OpenSesame\lib\copy.py", line 163, in deepcopy
y = copier(x, memo)
File "C:\Program Files (x86)\OpenSesame\lib\copy.py", line 257, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "C:\Program Files (x86)\OpenSesame\lib\copy.py", line 190, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "C:\Program Files (x86)\OpenSesame\lib\copy.py", line 334, in _reconstruct
state = deepcopy(state, memo)
File "C:\Program Files (x86)\OpenSesame\lib\copy.py", line 163, in deepcopy
y = copier(x, memo)
File "C:\Program Files (x86)\OpenSesame\lib\copy.py", line 257, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "C:\Program Files (x86)\OpenSesame\lib\copy.py", line 174, in deepcopy
y = copier(memo)
TypeError: cannot deepcopy this pattern object
Any idea how I could copy a canvas to modify it without changing the original one?
Thank you!
Sylvain
Comments
Hi Sylvain,
The way to create a deep copy is
Canvas.copy(), which works around the facts that not all parts of aCanvasare compatible with Python'scopy.deepcopy(). Have you tried that, and if so, did you encounter problems with this function?Cheers!
Sebastiaan
Check out SigmundAI.eu for our OpenSesame AI assistant!
Hey Sebastiaan!
Sorry I did not know that Canvas.copy() existed! It works perfectly!
Thank you!
Best,
Sylvain