How to mutate a list with a function in python?

Ritvik Sharma picture Ritvik Sharma · Jul 11, 2015 · Viewed 16.5k times · Source

Here's a pseudocode I've written describing my problem:-

func(s):
   #returns a value of s

x = a list of strings
print func(x)
print x #these two should give the SAME output

When I print the value of x in the end, I want it to be the one returned by func(x). Can I do something like this only by editing the function (and without setting x = func(x))

Answer

Padraic Cunningham picture Padraic Cunningham · Jul 11, 2015
func(s):
   s[:] = whatever after mutating
   return s

x = a list of strings
print func(x)
print x

You don't actually need to return anything:

def func(s):
    s[:] = [1,2,3]

x = [1,2]
print func(x)
print x # -> [1,2,3]

It all depends on what you are actually doing, appending or any direct mutation of the list will be reflected outside the function as you are actually changing the original object/list passed in. If you were doing something that created a new object and you wanted the changes reflected in the list passed in setting s[:] =.. will change the original list.