2

例如,我想做一个深拷贝ato b

>> a=zeros(2,3);
>> b=a;

所以这里=只创建一个浅拷贝。我的问题是,在这种情况下如何生成深层副本?我知道我可以添加一个命令

b(1,1)=b(1,1)

使其成为深层副本。但是有没有更好的方法来做到这一点?

4

2 回答 2

6

Matlab 不创建浅拷贝,而是使用写时拷贝。除了运行时,这对您应该是完全透明的,这意味着 matlab 会在需要时创建副本。不过,如果您想强制复制,您可以使用此处提到的示例之一:https ://stackoverflow.com/a/36062575/2732801

 B=A(:,:);
于 2020-01-31T13:07:52.517 回答
2

一般来说,MATLAB 使用写时复制,您不必考虑它。我同意 Daniel 的观点,这种复制对您来说是完全透明的,但我不建议您进行强制深复制。reshape 之类的东西也不会强制复制,因此您在内存使用方面会获得很多效率。MATLAB 也会在需要时为您创建一个副本。

这里有一些讨论这个的好文章:

于 2020-01-31T16:40:16.177 回答