Код покажите, скорее всего вы что-то неправильно делаете.
Вот пример.
>>> def f1(l):
l=l+[0]
>>> def f2(l):
l+=[0]
>>> def f3(l):
l.append(0)
>>> mylist=[1,2,3]
>>> f1(mylist)
>>> mylist
[1, 2, 3]
>>> f2(mylist)
>>> mylist
[1, 2, 3, 0]
>>> f3(mylist)
>>> mylist
[1, 2, 3, 0, 0]
В первой функции выражение
l=l+[0]
создает локальную переменную
l, которая ссылается на некий новый список, состоящий из элементов списка, переданного в функцию, с добавленным элементом (0). То есть
l слева и
l справа - это разные переменные.
Во второй функции происходит (неявно) вызов метода объекта-списка, переданного в функцию, поэтому список в результате ("снаружи") изменяется. В третьей функции происходит явный вызов метода объекта, переданного в функцию.
Хотел бы отметить, специалистом по CS (в части теории языков программирования) не являюсь, мог напутать с терминологией.
Есть на эту тему хорошая
статья.
UPD:
Первый пример подробнее:
>>> def f1(l):
print "Value at function start: {}, id: {}".format(l,id(l))
l=l+[0]
print "Value at function end: {}, id: {}".format(l,id(l))
>>> mylist=[1,2,3]
>>> f1(mylist)
Value at function start: [1, 2, 3], id: 44215272
Value at function end: [1, 2, 3, 0], id: 5440176
>>> mylist
[1, 2, 3]
Видно по разным id, что происходит обращение к разным переменным.