wrote in message news:5506e4d8-bd1d-4e56-8d1b-f71fa8293...@googlegroups.com...

在 2016年10月19日星期三 UTC+8下午3:17:18,Peter Otten写道:
chenyong20...@gmail.com wrote:

> 在 2016年10月19日星期三 UTC+8上午11:46:28,MRAB写道:
>> On 2016-10-19 03:15, chenyong20...@gmail.com wrote:
>> > Thanks Peter and Anssi for your kind help. Now I'm ok with the first
>> > question. But the second question still confused me. Why "it seems >> > that
>> > after root = root.setdefault(ch,{}) tree['a'] and root are the same
>> > object" and follows tree['a']['b']? Thanks.
>> >

please forgive my stupid. I still can't follow this.

Let's see if I can explain. I am using 't' and 'r' instead of 'tree' and 'root', but otherwise it is the same as your original example.

t = {}
r = t
id(t)
2542235910088
id(r)
2542235910088

At this point, t and r are both references to the same empty dictionary.

r = r.setdefault('a', {})

This has done two things.

It has inserted the key 'a' into the dictionary, and set its value to {}.

t
{'a': {}}
id(t)
2542235910088

It has also rebound 'r' so that it now references the new empty dictionary that has been inserted.

r
{}
id(r)
2542234429896
t['a']
{}
id(t['a'])
2542234429896

Now continue this process with r = r.setdefault('b', {}), and watch what happens.

Hopefully this will help you to understand. Feel free to ask further if not sure.

Frank Millman


--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to