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?
See also:
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) from dict_b
to dict_a
. There is still one instance of that dictionary.
To get the desired behavior, use either the dict.copy
method, or use copy.deepcopy
if your dict may have nested dicts or other nested objects.
>>> a = {1:2}
>>> b = a.copy()
>>> b
{1: 2}
>>> b[3] = 4
>>> a
{1: 2}
>>> b
{1: 2, 3: 4}
>>>