Levi, so altering the class in one module will also alters that class in all other modules?
Yeah, although we call it an object, which is an instantiated class.
Think of a class as the blueprint, and the object as what you made with the blueprint. You assign the object to a pointer in memory(the variable). When you do something like:
game = Game() #creates an object in memory from the blueprint class, and then points the "game" variable at it.
blah = game
uberblah = blah
All you are doing is pointing the variables game, blah, uberblah at the same object in memory. So when you are assigning a variable, you aren't copying the object, you are just pointing to it. This means you can have 5 million variables(in other objects, in lists, in hashes, whatever) all pointing to a single object, and any change you make to that object is reflected no matter which variable you access it with.
The caveat here is that primitive types(strings, integers, truth values) are usually NOT pointed too. So if you do the same thing as above but with an integer:
game = 7
blah = game
uberblah = blah
You actually end up with 3 copies of the number 7. Changing one won't change the others. Its a little confusing, but its mostly done this way for efficiency reasons. Any object that is created from a class you write will work the first way I described though, so don't worry too much about it.