I've got this code snippet, which converts a flat list to a dictionary: (for example, from:
`X = [['A', 'B', 'C'], ['A', 'B', 'D'],['W','X'],['W','Y','Z']]`
to
{'A': {'B': {'C': {}, 'D': {}}}, 'W': {'X': {}, 'Y': {'Z': {}}}}
the code:
d = {}
for path in X:
current_level = d
for part in path:
if part not in current_level:
current_level[part] = {}
current_level = current_level[part]
print('current_level = ', current_level)
print('d = ', d)
print(d)
and here's the output:
current_level = {}
d = {'A': {}}
current_level = {}
d = {'A': {'B': {}}}
current_level = {}
d = {'A': {'B': {'C': {}}}}
current_level = {'B': {'C': {}}}
d = {'A': {'B': {'C': {}}}}
current_level = {'C': {}}
d = {'A': {'B': {'C': {}}}}
current_level = {}
d = {'A': {'B': {'C': {}, 'D': {}}}}
current_level = {}
d = {'A': {'B': {'C': {}, 'D': {}}}, 'W': {}}
current_level = {}
d = {'A': {'B': {'C': {}, 'D': {}}}, 'W': {'X': {}}}
current_level = {'X': {}}
d = {'A': {'B': {'C': {}, 'D': {}}}, 'W': {'X': {}}}
current_level = {}
d = {'A': {'B': {'C': {}, 'D': {}}}, 'W': {'X': {}, 'Y': {}}}
current_level = {}
d = {'A': {'B': {'C': {}, 'D': {}}}, 'W': {'X': {}, 'Y': {'Z': {}}}}
So with current_level = d
, it seems we are passing a reference to the dictionary d
. Indeed, this dictionary doesn't appear anymore in the code after that.
But when we do: current_level = current_level[part]
: the current_level
dict is given the value an empty dict {}
whereas d
doesn't change (see the output).
So I'm confused: is it a reference to the dict or a distinct copy?