On Sep 17, 11:04 pm, Lloyd Linklater <[EMAIL PROTECTED]> wrote: > SpringFlowers AutumnMoon wrote: > > Is that the case: if a is an object, then b = a is only copying the > > reference? > > That and it adds a counter. > > a = ["foo", "bar"] > b = a > b[0] = "bite me" > p a, b > > a = "different" > p a, b > > *** > > In the first print, we get > ["something else", "bar"] > ["something else", "bar"] > > showing that changing b changes a, as expected. However, if we change > a, b is NOT changed as seen in the second print. > > "different" > ["something else", "bar"] > > That means that there is a counter inside that says to separate the two > or b would have changed with a as a changed with b initially.
i think the line a = "different" means a is now set to a pointer to the String object with content "different". or that "a is now a reference to the String object." and b is still a reference to the Array object. so that's why a and b print out different things. they point to different objects. i think: whenever in Ruby, Python, and Java, a is never an object. a is always a "reference to an object"... this will solve a lot of puzzles when we don't understand some code behaviors. when a writing or a book reads "a is a Hash object; a is an Array object; or a is an Animal object" it is just a short form to say that "a is a reference to that object." b = a means "whatever a is referencing to, now b is referencing it too". so that's why a[1] = "foobar" will change what b will display, but a = "foobar" will not change what b will display. (because a[1] = "foobar" says "what is a referencing? go there and change its content that has the index 1" and when b goes there to see it, it is also changed.) -- http://mail.python.org/mailman/listinfo/python-list