#### Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Supported by

# Deepcopy of a canvas?

edited June 2018

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

• Hi Sylvain,

The way to create a deep copy is `Canvas.copy()`, which works around the facts that not all parts of a `Canvas` are compatible with Python's `copy.deepcopy()`. Have you tried that, and if so, did you encounter problems with this function?

Cheers!
Sebastiaan

Thanked by 1Sylvain

There's much bigger issues in the world, I know. But I first have to take care of the world I know.
cogsci.nl/smathot

• Hey Sebastiaan!

Sorry I did not know that Canvas.copy() existed! It works perfectly!

Thank you!

Best,

Sylvain