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 in OpenSesame

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

  • Hey Sebastiaan!

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

    Thank you!

    Best,

    Sylvain

Sign In or Register to comment.