python“del”statment删除多个dicts

时间:2015-08-11 11:59:58

标签: python dictionary del

我对dicts的del语句有问题,因为我得到多次删除。例如,我的代码如下所示:

info_dict = {'parent1':{'exon':{'exon1':{'str_0':1, 'end_0':1}, 'exon2':{'str_0':2, 'end_0':2}}},'parent2':{'exon':{'exon1':{'str_0':1, 'end_0':1}, 'exon3':{'str_0':3, 'end_0':3}}}}
print info_dict 
#now i want to delete this key: 
del info_dict.get('parent1').get('exon').get('exon1')['end_0']
#as an result i get this: 
print info_dict 
{'parent1':{'exon':{'exon1':{'str_0':1}, 'exon2':{'str_0':2, 'end_0':2}}},'parent2':{'exon':{'exon1':{'str_0':1}, 'exon3':{'str_0':3, 'end_0':3}}}}

如您所见,del语句从'parent1'中删除了右键。但它也从dict'parent2'中删除了相同的密钥。

在我的代码中,我循环使用:

for parent_key in info_dict: 
    "check something and del"

如果我运行上面的代码,del语句只删除一个键。但是当我循环它时,它会删除多个键。我几次检查了我的代码,它没问题。在这一点上我不知道有什么问题...对不起我没有给你看整个代码,它似乎很大。但也许有人知道问题是什么。 谢谢

1 个答案:

答案 0 :(得分:2)

在实际代码中的某处,您正在创建引用dicts,因此当您在一个地方进行更改时,您将更改所有引用。

d = {1:{2:3}}

d1 = d # creates a reference so d1 id d
print(d)
print(d1)
del d[1]

print(d)
print(d1)

输出:

{1: {2: 3}}
{1: {2: 3}}
{} # both empty as both are the same dict/object
{}

现在使用copy.deepcopy制作实际副本:

from copy import deepcopy

d = {1:{2:3}}

d1 = deepcopy(d) # creates a copy/new object
print(d)
print(d1)
del d[1]

print(d)
print(d1)

输出:

{1: {2: 3}}
{1: {2: 3}}
{} # only d is empty as we created a new object for d1
{1: {2: 3}}