You can normally use lists as arguments and return values just fine, though there's a slight nuance to be aware of.
def double_val(param):
param = param * 2
x = 4
double_val(x)
print(x)
def double_list(param):
param[0] = param[0] * 2
x = [4]
double_list(x)
print(x)
Big objects like collections are really stored in a different part of memory which is referenced by the variable name.
When you pass one of these objects as an argument, the parameter is really a copy of the reference, not the value itself.
Small objects like ints and floats really do get copied to the parameter.