MATLAB
There is a feature in MATLAB called "cheap copies" that makes expanding an array of different objects of the same class a snap. When I say different objects I mean that in the case of handle class objects, each object references a unique object, so that a change in one of its properties affects only it, and is not simultaneously changed in all of the other objects. That's what would happen if all of the objects were really references to the exact same object.For example assume you have the following MATLAB handle class.
classdef MyClass < handle properties a end methods function obj = MyClass(a) obj.a = a; end end endThen ...
myClassArray(3) = MyClass(5)...creates an array of three
MyClass
objects which are unique.Python
In Python the way to do this is withdeepcopy
from the builtin copy
package.For example assume you have the following Python class.
from copy import deepcopy class MyClass(object): def __init__(self, a=5): self.a = a # make 3 copies, but all point to the same instance myClassArray = [MyClass(a=5)] * 3 # now make deep copies of each object in the array except the first # one, so that they are now all unique instances myClassArray[1:] = [deepcopy(dummy) for dummy in myClassArray[1:]]Enjoy! For objects that are computationally expensive, this is a very fast way to build a bunch of identical but unique "copies" of objects of the same class.
This example also demonstrates how concise Python code is compared to MATLAB - 3 lines vs. 10 lines!
ReplyDelete