Michael wrote: > if i do > a=2 > b=a > b=0 > then a is still 2!? > > so when do = mean a reference to the same object and when does it mean make > a copy of the object??
It *always* means a reference. It *never* makes a copy. Although the terminology isn't quite right, you can think of all "variables" in Python being "references". Assignment statements in Python then simply change the object that a "variable" "points" to. Your example with integers: py> a = 2 py> b = a py> b = 0 py> a 2 py> b 0 A simlar example with lists: py> a = [5, 7] py> b = a py> b = [] py> a [5, 7] py> b [] Of course, if you modify an object while two names are bound to it ("two variables hold pointers to it") then the modifications will be visible through either name ("either pointer"): py> a = [5, 7] py> b = a py> a.pop() 7 py> a [5] py> b [5] Note that since integers are immutable, I can't give you a direct example like this with integers, but try: py> class I(int): ... pass ... py> a = I(42) py> a 42 py> b = a py> b 42 py> a.flag = True py> b.flag True py> a.flag = False py> b.flag False So even with ints (or at least a mutable subclass of ints), modifications made to an object through one name ("reference") are also visible through other names ("references") to that object. HTH, STeVe -- http://mail.python.org/mailman/listinfo/python-list