功能的工作区是否复制了可变输入?

时间:2016-08-08 10:39:43

标签: matlab function workspace

我在基础Workspace中定义了一个变量

a = ones(10);

我想创建一个输入向量vec1并返回vec2的函数:

function vec2 = myfun(vec1)

Operations with vec1

end

让我们

b = myfun(a);

myfun的工作区中,我们将有一个名为vec1的变量,其值与a相同,但它不在基础工作区中。

处于调试模式并使用

dbup;

我可以分别在base和myfun工作区中看到两个不同的变量avec1

myfun是否在两个不同的工作区中复制变量a(因此使用更多内存)?

如果不是这样,它是如何工作的?它是一个指针,为同一信息分配两个不同的名称吗?

提前谢谢。

1 个答案:

答案 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,因此必须复制。