from functools import wraps from copy import deepcopy def no_side_effects_decorator(func): @wraps(func) def inner(*args, **kwargs): if isinstance(args[0], (list, dict, set)): # copeed_args = tuple([args[0].copy(), args[1]])\ copeed_args = tuple([deepcopy(args[0]), args[1]]) print(copeed_args) # elif isinstance(args[0], dict): else: copeed_args = args return func(*copeed_args, **kwargs) return inner @no_side_effects_decorator def add_element(data, key, value=None): data[key] = value return data def test(*args, **kwargs): print(args) print(args[0]) def main(): my_list = [1, 2, 3] # print('Результат вызова =', add_element(my_list, 4)) # print('Результат вызова =', add_element(my_list, 5)) my_dict = {1: 'Hello', 2: 'World'} print('Результат вызова =', add_element(my_dict, 4, 'four')) print(my_list) # print(add_element.__name__) # test(my_list) if __name__ == '__main__': main()