On 3/30/2012 10:56 AM Prasad, Ramit said...

Lists are mutable objects. When you pass a list to a function you bind
a name in the functions namespace to the list object. Every name
binding to that object will have the ability to modify the list.

If you want to modify the list but not change it for others usually
you do something like

new_list = list( old_list )
OR
new_list = old_list[:]

Be aware though that this copies only the 'top' level objects -- if those object are themselves mutable you may still have issues:


>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [a,b]
>>> d = c[:]
>>> d.append(1)
>>> d
[[1, 2, 3], [4, 5, 6], 1]
>>> c
[[1, 2, 3], [4, 5, 6]]
>>> # so far so good
...
>>> b.append(7)
>>> d
[[1, 2, 3], [4, 5, 6, 7], 1]
>>> c
[[1, 2, 3], [4, 5, 6, 7]]
>>>


To avoid this, look at copy.deepcopy as an alternative:

>>> d = copy.deepcopy(c)
>>> d
[[1, 2, 3], [4, 5, 6, 7]]
>>> b.append(8)
>>> c
[[1, 2, 3], [4, 5, 6, 7, 8]]
>>> d
[[1, 2, 3], [4, 5, 6, 7]]
>>>


HTH,

Emile


_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to