Request.data изменяется в каждой переменной

У меня такой код:

initial_data = dict(request.data.copy())
reserve_data = dict(request.data.copy())
print(initial_data)
for key in initial_data.keys():
    merchant_data = initial_data.get(key)
    for sub_key in merchant_data.keys():
        if sub_key in keys_to_change:
            reserve_data[key].pop(sub_key)
            reserve_data[key][values_to_change.get(sub_key)] = merchant_data.get(sub_key)
print(initial_data)

Как видите, я не меняю initial_data, но она все равно меняется

#before
{'22': {'domain': 'cashier.random.io', 'salt': 'ewrwerwe', 'active': 1, 'separate_cashier': '', 'additional_hosts': {}, 'tradingroom_url': '', 'crm': {'login': '', 'secret': '', 'url': ''}, 'currencies': ['USD', 'EUR'], 'payment_methods': {'12': {}}, 'processors': {}}}
#after
{'22': {'salt': 'ewrwerwe', 'separate_cashier': '', 'additional_hosts': {}, 'tradingroom_url': '', 'crm': {'login': '', 'secret': 
'', 'url': ''}, 'currencies': ['USD', 'EUR'], 'payment_methods': {'12': {}}, 'processors': {}, 'host': None, 'is_active': None}} 

Есть ли способ избежать этого? Спасибо всем

initial_data = dict(request.data.copy())
reserve_data = dict(request.data.copy())

делает мелкие копии данных запроса.

Если вы внутренне изменяете содержимое, вам нужно использовать copy.deepcopy вместо этого:

initial_data = dict(copy.deepcopy(request.data))
reserve_data = dict(copy.deepcopy(request.data))
Вернуться на верх