例如,我想做一个深拷贝a
to b
:
>> a=zeros(2,3);
>> b=a;
所以这里=
只创建一个浅拷贝。我的问题是,在这种情况下如何生成深层副本?我知道我可以添加一个命令
b(1,1)=b(1,1)
使其成为深层副本。但是有没有更好的方法来做到这一点?
例如,我想做一个深拷贝a
to b
:
>> a=zeros(2,3);
>> b=a;
所以这里=
只创建一个浅拷贝。我的问题是,在这种情况下如何生成深层副本?我知道我可以添加一个命令
b(1,1)=b(1,1)
使其成为深层副本。但是有没有更好的方法来做到这一点?
Matlab 不创建浅拷贝,而是使用写时拷贝。除了运行时,这对您应该是完全透明的,这意味着 matlab 会在需要时创建副本。不过,如果您想强制复制,您可以使用此处提到的示例之一:https ://stackoverflow.com/a/36062575/2732801
B=A(:,:);
一般来说,MATLAB 使用写时复制,您不必考虑它。我同意 Daniel 的观点,这种复制对您来说是完全透明的,但我不建议您进行强制深复制。reshape 之类的东西也不会强制复制,因此您在内存使用方面会获得很多效率。MATLAB 也会在需要时为您创建一个副本。
这里有一些讨论这个的好文章: