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 aCanvas
are 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