python 字典嵌套的实现(2.16测试)

代码:

config = {}
parts = ['a', 'b', 'c']
parent = config
print('1', id(parent))
print('2', id(config))
key = parts.pop(0)
print(key)
while parts:
    parent = parent.setdefault(key, {})
    print('3', id(parent))
    key = parts.pop(0)
parent[key] = 'd'
print('4', id(parent))
print(config)
print('5', id(config['a']['b']))
print(parent)
d = {}
print(d.setdefault('1', {1}))

输出:

1 2715472588736
2 2715472588736
a
3 2715472613448
3 2715472613880
4 2715472613880
{'a': {'b': {'c': 'd'}}}
5 2715472613880
{'c': 'd'}
{1}

首先:parent.setdefault(key, {}) 当parent中有key这个健的时候,返回value。如果没有这个健,则创建一个key键,值为{},并返回{}。

pop(0)是返回列表中的第一个元素。

好,接下来看代码:

parent = config #此时parent和config共用一个地址,他们是同一个值。
经过第一个parent = parent.setdefault(key, {}),此时parent={}地址发生变化,地址为2715472613448,而此时config={'a':{}},你输出id(config['a'])也为
2715472613448。也就是说这个时候的parent指向的就是config['a']。依次类推。得到{'a': {'b': {'c': 'd'}}}

posted on 2018-02-27 20:47  xiao小  阅读(168)  评论(0)    收藏  举报

导航