MATLAB中的浅拷贝行为

时间:2018-01-18 12:44:58

标签: matlab shallow-copy copy-on-write

很多人在Python开始时遇到意想不到的浅拷贝行为,我想确保我不会在MATLAB中犯这些错误(我的经验较少)。

我读了这篇关于object behaviors in MATLAB的文章,并且我阅读了与指针/句柄行为有关的this question。是否存在 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(this.requestCode == requestCode && resultCode == RESULT_OK){ Bitmap bitmap = (Bitmap)data.getExtras().get("data"); imageview.setImageBitmap(bitmap); } } 返回false的情况,但您仍会遇到isa(obj, 'handle')的修改会导致修改另一个变量的情况(据我所知,函数调用修改的任何参数都应该触发一个copy on write and duplicate the variable in memory)?

这是对MATLAB中“浅拷贝”行为的完全理解吗?标准值对象复制行为是否还有其他注意事项?

1 个答案:

答案 0 :(得分:3)

值类可以包含句柄类,如果修改它,您将更改句柄类的实例。例如(注意containers.Map是一个内置类,它是一个句柄 - 没有什么特别之处,我只是为了方便而选择它:

>> a = containers.Map; a('hello') = 1;
>> b = struct('field1', 1, 'field2', a);
>> isa(b, 'handle')
ans =
  logical
   0
>> b.field2('hello') = 2;
>> a('hello')
ans =
     2

所以b是一个结构(具有值语义),但它的一个字段包含一个containers.Map,它是一个句柄并具有引用语义。修改该字段后,您还需要更改a,这是对基础containers.Map的另一个引用。