(使用Python 2.7)
我正在尝试创建模板对象的副本以待填充。为简单起见,我尝试像这样做:
template={'thing1':'','thing2':'','thing3':''}
for number in some_list:
pile[number]=template
但是后来当我这样做时:
pile[1]['thing1']='blahblah'
它还会导致:
print pile[2]['thing1']
'blahblah'
print template['thing1']
'blahblah'
我想要的是:
pile[1]['thing1']='blahblah'
让堆[2]保持不变,这样
print pile[2]['thing1']
''
我知道问题在于当我说
pile[number]=template
这意味着pile [1]是模板,而pile [2]也是模板。(我今天在处理这个问题时才完全意识到这一点...当我反复大声重复这个认识及其影响时,它慢慢地深入人心...这就是Python的工作方式,对吧?我感觉自己刚刚加入了Python俱乐部。我最初使用的是MATLAB,所以不要对我太苛刻。)
因此,我想可能有两种方法可以解决这个问题-一种涉及到一些不与原始对象链接的对象的复制,或者类似于这样的东西,并且可能非常简单和明显。也许还有另一种特定于字典的方法,例如初始化键之类的东西。我主要对第一种答案感兴趣,因为这将有助于完善我对Python工作方式的理解,但第二种答案也很好。谢谢:)