kj, as Piet van Oostrum as said, that's the difference between mutable an immutable. It comes from the procedural nature of Python, and probably an explanation of such topic can't be avoided if you want to learn/teach Python.
Lot of people think that a language where everything is immutable is simpler for newbies to understand (even if they have to learn what higher-order functions are). That's why some people think Scheme or other languages (even Clojure, I guess) are better for novices (Scheme has mutability, but you can avoid showing it to newbies). Some people say that languages that mostly encourage the use of immutable data structures (like F#, Clojure, Scala and many other less modern ones) help avoid bugs, maybe for novices too. On the other hand, it's hard or impossible to actually remove complexity from a system, and you usually just move it elsewhere. So other things will become harder to do for those novices. I have no idea if for the average novice it's simpler to learn to use a immutables-based language instead of a mutables-based one (it can also be possible that some novices prefer the first group, and other novices prefer the second group). >From what I have seen lot of students seem able to learn Python, so it's not a bad choice. Python isn't perfect, and in *many* situations it is pragmatic, for example to increase its performance. Generally for a novice programmer running speed is not important, but it's important to have a really coherent and clean language. I've personally seen that for such people even Python looks very "dirty" (even if it's one of the less dirty ones). For example a novice wants to see 124 / 38 to return the 62/19 fraction and not 3 or 3.263157894736842 :-) People may be able to invent a clean and orthogonal language that's easy to use and has very few compromises, fit for newbies. But this language may be very slow, not much useful in practice (who knows? Maybe there's a practical niche even for such very high level language), and it doesn't teach how to use lower level languages like C :-) Today I think there are no languages really fit for teaching. Python is one of the few fit ones, but it's getting more and more complex as time passes because it's getting used in more and more complex real world situations (a language fit for newbies must not have abstract base classes, decorators, etc). D language is too much complex for a newbie. Java is not too much bad, but it's requires to write too much code, it's too much fussy (semicolons at the end of lines? Newbies say that the computer is an idiot when it refuses code just because there's a missing useless semicolon!), and it misses some necessary things (first class functions! Damn). A nice language like Boo running on the Mono VM seems another option :-) In the past Pascal was good enough, but I think it's not good enough anymore. The problem is that teaching is a niche activity (even if a very important one). PLT Scheme is one of the few environments (beside Squeak, Python itself, and little more) that look refined and implemented well enough for such purpose. See you later, bearophile -- http://mail.python.org/mailman/listinfo/python-list