working with pointers
Steven Bethard
steven.bethard at gmail.com
Tue May 31 15:13:00 EDT 2005
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
More information about the Python-list
mailing list