使用zip和map创建嵌套字典时如何避免"指向同一对象"?



我希望避免在下面的代码中指向同一个对象。请查看以下输出和所需输出。

代码:

import random
prototype = [{'uniqueDict': list()}]
def mapme(somekey):
global aa
aa = [random.randint(0, 5), random.randint(6, 10)]
return dict(zip(aa, len(aa) * prototype))

forSomeKey = ['outer']
FirstSecondOnce = dict(zip(forSomeKey, list(map(mapme, forSomeKey))))
for key in aa:
location = [['first', 'second']]
for ixy in location:
FirstSecondOnce[forSomeKey[0]][key]['uniqueDict'].append(ixy)
print(FirstSecondOnce)

输出:

{'outer': {0: {'uniqueDict': [['first', 'second'], ['first', 'second']]}, 7: {'uniqueDict': [['first', 'second'], ['first', 'second']]}}}

期望输出:

{'outer': {0: {'uniqueDict': [['first', 'second']]}, 7: {'uniqueDict': [['first', 'second']]}}}

请注意,['first', 'second']在每次关键循环迭代中只附加一次,但因为它们指向同一个对象。我已经为prototype尝试了.copy()deepcopy(prototype),但都不起作用。请建议如何解决此问题。

谢谢。

只是不要做prototype的事情:

return {x: {'uniqueDict': []} for x in aa}

与以创建模板的方式创建新对象相比,尝试在Python中深度复制模板对象通常会很慢、容易出错且很尴尬。

最新更新