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.