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

    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

Sign In or Register to comment.