def set_if_not_there(d, fields, default_value=None):
for field in fields:
if not field in d:
d[field] = default_value
d = { }
set_if_not_there(d, ['cnt1', 'cnt2'], 0)
set_if_not_there(d, ['tags1', 'tags2'], [])
d['cnt1'] += 1
d['tags1'].append('work')
print d
输出是:
{'tags2': ['work'], 'cnt2': 0, 'cnt1': 1, 'tags1': ['work']}
如您所见,tags1
实际上tags2
指的是同一个列表,这不是有意的。cnt1
并且cnt2
工作正常。
如何实现set_if_not_there
以便创建copies
可变对象,但仅在需要时?也就是说,如果默认值是“标量”(int、string、None
...),则不需要副本,但对于列表和字典,则需要副本。