When I try this code:
dict_a = dict_b = dict_c = {}
dict_c['hello'] = 'goodbye'
print(dict_a)
print(dict_b)
print(dict_c)
I expected that it would just initialise the dict_a, dict_b and dict_c dictionaries, and then assign a key in dict_c, resulting in
{}
{}
{'hello': 'goodbye'}
But it seems to have a copy-through effect instead:
{'hello': 'goodbye'}
{'hello': 'goodbye'}
{'hello': 'goodbye'}
Why?
This is because in Python, variables (names) are just references to individual objects. When you assign
dict_a = dict_b, you are really copying a memory address (or pointer, if you will) fromdict_btodict_a. There is still one instance of that dictionary.To get the desired behavior, use either the
dict.copymethod, or usecopy.deepcopyif your dict may have nested dicts or other nested objects.