I am struggling with python dictionary. I have two dics named defaultSettings and personalSettings. I want to make function sets personalSettings's values to defaultSettings's values. But I don't want to all changes be applied to defaulSettings.
I tried this code:
defaultSettings = {'s1': 1, 's2':2, 's3':3}
personalSettings = {'s1': 3, 's2':2, 's3':1}
print(defaultSettings)
print(personalSettings)
print('-*-*-*-*-*-*-*-*-*-*-*-*')
personalSettings = defaultSettings
print(defaultSettings)
print(personalSettings)
print('-*-*-*-*-*-*-*-*-*-*-*-*')
personalSettings['s1'] = 5
print(defaultSettings)
print(personalSettings)
And my output is:
{'s1': 1, 's2': 2, 's3': 3}
{'s1': 3, 's2': 2, 's3': 1}
-*-*-*-*-*-*-*-*-*-*-*-*
{'s1': 1, 's2': 2, 's3': 3}
{'s1': 1, 's2': 2, 's3': 3}
-*-*-*-*-*-*-*-*-*-*-*-*
{'s1': 5, 's2': 2, 's3': 3}
{'s1': 5, 's2': 2, 's3': 3}
-*-*-*-*-*-*-*-*-*-*-*-*
If I change a value of personalSettings after personalSettings = defaultSettings, defaultSettings's value changes too. I know this;
But I don't know how avoid this or other way.

Consider
The trick is
actual = dict(defaults). This wayactualcan be changed without affecting defaults.If your dicts have sub-objects, consider
deepcopyorjson.dumps/loadsto make a deep copy: