Статуя Python "del" удаляет несколько диктовок
У меня проблема с оператором del для dicts, так как я получаю несколько удалений. Например, мой код выглядит так:
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 ответ
Где-то в вашем фактическом коде вы создаете ссылки на 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}}