Diez B. Roggisch wrote:
Esmail schrieb:
Could someone help confirm/clarify the semantics of the [:] operator
in Python?

a = range(51,55)

############# 1 ##################
b = a[:] # b receives a copy of a, but they are independent
 >


# The following two are equivalent
############# 2 ##################
c = []
c = a[:] # c receives a copy of a, but they are independent

No, the both above are equivalent. Both just bind a name (b or c) to a list. This list is in both cases a shallow copy of a.



############# 3 ##################
d = []
d[:] = a # d receives a copy of a, but they are independent


This is a totally different beast. It modifies d in place, no rebinding a name. So whover had a refernce to d before, now has a changed object,

I follow all of this up to here, the next sentence is giving me pause

whereas in the two cases above, the original lists aren't touched.

The original list 'a', isn't changed in any of these cases right? And
modifying b, c or d would not change 'a' either - or am I not understanding this correctly?

## 1 ##

creates a new list and copies all elements from a to b

## 2 ##

take an already existing list (empty) and copies all elements from a to
it (no data is lost by c since c was empty to start out with)

## 3 ##

d is a list, and all of its contents (if it had any) would be
filled with that of a .. but changes to a still are not reflected in d
.. this is confusing...



Semi-aside, if I wanted to make local copy of a list sent to me as a
parameter, which of these is the most appropriate to use (I don't want
changes to change the original list sent).

Thanks again.

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to