В питоне в переменных хранятся не сами объекты, а ссылки на них. И в данном случае тоже, то есть, item - это ссылка на тот же словарь, что и user['item']. И если вы меняете объект по одной ссылке, то на по второй ссылке он, как можно понять, изменится тоже. Если хотите избежать этого - используйте метод словаря dict.copy или copy.deepcopy. А ещё есть слово is, которое проверяет, ведут ли две ссылки на один и тот же объект.
>>> first = {'title': '', 'photo': [], 'location': ''}
>>> second = first
>>> second is first
True
>>> second = first.copy()
>>> second == first
True
>>> second is first
False
Но лучше используйте deepcopy, он копирует и вложенные списки.
>>> from copy import deepcopy
>>> arr = [[[1], [1,2,3,4]], [1,2,3,4,5,6]]
>>> arr2 = arr
>>> arr2 is arr
True
>>> arr_copied = arr.copy()
>>> arr_copied is arr
False
>>> arr_copied[0] is arr[0]
True
>>> arr_deepcopied = deepcopy(arr)
>>> arr_deepcopied == arr
True
>>> arr_deepcopied is arr
False
>>> arr_deepcopied[0] is arr[0]
False
'photo': []тоже сделалась копия, используйте deepcopy. https://pythonworld.ru/moduli/modul-copy.html – andreymal Apr 17 '19 at 08:22