+ 1
[SOLVED] How to pass by value in python?
I tried to pass a list as an argument in a function but the values in the list would keep changing, I assume that's because python automatically passes any argument to be pass by reference. is there any ways to pass a list into a function by value? my desired result would be : [[0], [0], [0]] [[0], [0], [0]] [[0], [0], [0]] https://code.sololearn.com/cdXO6IpnQMe1
3 Answers
+ 3
not exactly: objects are passed by reference (and lists are object), but basic types (such as numbers, strings...) are quite passed by value...
the built-in copy module could help you to shallow copy or deep copy an object.
deep copy is the one you need to deeply copy an object, as you have list inside list, and you don't want to modify the original inner lists:
import copy
mylistcopy = copy.deepcopy(mylist)
mylist.copy() do only a shallow copy, as slicing (mylist[:]) or copy.copy(mylist)
+ 2
Python passes a list (or any other mutable object) by reference. You can always pass a copy if you don't want to alter your original list.
a = arr.copy()
Edit: Shen Bapiro ok the above didn't work and I've just seen the issue. Since you have nested lists, you need to use deepcopy.
from copy import deepcopy
...
def func(arr):
a = deepcopy(arr)
...
+ 1
thx for the answers guys, I managed to solved them