Единственный способ, которым я могу думать об этом без копии памяти, это обернуть исходные данные в объект, являющийся подклассом класса handle.
http://www.mathworks.co.uk/help/techdoc/matlab_oop/brfylzt-1.html
Вы можете «копировать» класс ручки, используя обычный синтаксис
classB=classA
..но вы только делаете псевдоним для одних и тех же данных (изменения в ClassB отражены в CLASSA) , Это самая близкая вещь в matlab для подобной указателю семантики.
Например, создайте файл с именем myHandle
и вставьте следующий текст для определения класса. ,
classdef myHandle < handle
properties
data
moreData
end
methods
end
end
Затем вы можете использовать его, как обычную структуру. Из командной строки do ..
>> x = myHandle
x =
myHandle handle
Properties:
data: []
moreData: []
Methods, Events, Superclasses
... мы можем затем заполнить данные. , ,
>> x.data = [1 2 3 4];
>> x.moreData = 'efg';
... после того, как исходный объект был заполнен данными, псевдоним исходных данных может быть сделано путем ввода. ,
>> y = x
Самое интересное происходит с x
когда y
модифицируется, т.е.
>> y.data = [33 44 55 66];
>> disp(x)
x =
myHandle handle
Properties:
data: [33 44 55 66]
moreData: 'f'
Methods, Events, Superclasses
Вы можете даже ясно одно из имен-псевдонимов. ,
clear x
..и данные будут по-прежнему будут доступны в другой ручке для данных, y
. Память освобождается только тогда, когда на нее больше не обращаются ручки (когда reference count достиг нулевой отметки).
Простой способ: просто скопируйте его в другую переменную и уничтожьте старый. Кроме того, это возможный дубликат [этого вопроса] (http://stackoverflow.com/questions/5964639/matlab-renaming-workspace-elements-from-command-window). –
"...данные очень большие, то есть я не могу скопировать его в другую переменную и удалить первый ... » –
Крис: Не имеет значения. MATLAB использует ссылки, A = B не означает, что B копируется. –