我在基础Workspace中定义了一个变量
a = ones(10);
我想创建一个输入向量vec1
并返回vec2
的函数:
function vec2 = myfun(vec1)
Operations with vec1
end
让我们
b = myfun(a);
在myfun
的工作区中,我们将有一个名为vec1
的变量,其值与a
相同,但它不在基础工作区中。
处于调试模式并使用
时dbup;
我可以分别在base和myfun工作区中看到两个不同的变量a
和vec1
。
myfun
是否在两个不同的工作区中复制变量a(因此使用更多内存)?
如果不是这样,它是如何工作的?它是一个指针,为同一信息分配两个不同的名称吗?
提前谢谢。
答案 0 :(得分:4)
MATLAB使用的系统通常称为" copy-on-write"避免在函数工作区内复制输入参数,直到或除非您修改输入参数。如果不修改输入参数,MATLAB将避免复制。例如,在此代码中:
df['previous_week_income'] = df.groupby('user')['income'].shift().fillna(0)
print (df)
week_id user income previous_week_income
0 1 1 100 0.0
1 1 2 50 0.0
2 2 1 200 100.0
3 2 2 30 50.0
4 2 3 150 0.0
5 3 1 100 200.0
6 3 2 150 30.0
MATLAB不会在function y = functionOfLargeMatrix(x)
y = x(1);
的工作区中复制输入,因为functionOfLargeMatrix
在该函数中没有被更改。另一方面,如果你调用了这个函数:
x
然后在function y = functionOfLargeMatrix2(x)
x(2) = 2;
y = x(1);
的工作区内修改x
,因此必须复制。