That works just fine. Being paranoid, I like to supply defaults. Using a class works fine until it becomes too cumbersome or you want a better way of looking things up, then you move up to using an SqLite DB in memory.
def __init__(self, f=" ", r=):
self.first = f
self.rest = r
if __name__ == "__main__":
list_of_classes = 
list_of_classes.append(MyClass("x", ["a", "b"]))
print "----->", list_of_classes.first
print "----->", list_of_classes.rest
I wouldn't worry too much about space usage. On a typical 32bit python installation using __slots__, your class uses 16 bytes per instance, not counting the storage for the data within the class, and you shouldn't (8 of these are mandatory for a base python object, so in reality it uses 8 bytes for your data; two 32-bit pointers, which is what the struct would use in C).
I just assigned a sequence of attribute names that the instances will use. That way, python doesn't create a __dict__ for each instance, but allocates just enough extra space for pointers to the names in the sequence.
Also, note that I have used new style classes(subclassing from object). You really shouldn't be using old style classes anymore.
For Each ctrl As Control In Me.Controls("pnlMainPanel").Controls
If ctrl.GetType Is GetType(System.Windows.Forms.Panel) Then
For Each subCtrl As Control In ctrl.Controls
If subCtrl.GetType Is GetType(System.Windows.Forms.TextBox) Then
If subCtrl.GetType Is ...