Я пытаюсь понять, неправильно ли я понимаю, как должна работать глубокая копия ... любая помощь по этому вопросу приветствуется! У меня есть расширение C, которое изменяет словарь ввода python (это не должно быть, но это другая история). Чтобы сохранить исходные данные, я пытаюсь сделать резервную копию словаря до запуска расширения, но все они изменяются.
// Create lists as input to the dictionary.
>>> seq1 = ['SEQ1','AVWVCCCTAAKKLNN']
>>> seq2 = ['SEQ2','TAARKIQ']
// Create the dictionary
>>> seqdict = {seq1[0]:seq1[1]}
>>> seqdict[seq2[0]]=seq2[1]
>>> seqdict
{'SEQ1': 'AVWVCCCTAAKKLNN', 'SEQ2': 'TAARKIQ'}
// Create my dictionary copies
>>> import copy
>>> deepdict = copy.deepcopy(seqdict)
>>> shallowdict = seqdict.copy()
// As a test, modify my parent dictionary.
// Neither copy is modified with it.
>>> seqdict['SEQ2']='TAAKKLNN'
>>> seqdict
{'SEQ1': 'AVWVCCCTAAKKLNN', 'SEQ2': 'TAAKKLNN'}
>>> deepdict
{'SEQ1': 'AVWVCCCTAAKKLNN', 'SEQ2': 'TAARKIQ'}
>>> shallowdict
{'SEQ1': 'AVWVCCCTAAKKLNN', 'SEQ2': 'TAARKIQ'}
// Run the C extension that overwrites the sequence.
// It overwrites certain letters with "N"
>>> from clustalo import clustalo
>>> clustalo(seqdict,seqtype=1)
{'SEQ1': 'ANNNCCCTAANNNNN', 'SEQ2': '-------TAANNNNN'}
// The original dictionary is modified.
>>> seqdict
{'SEQ1': 'ANNNCCCTAANNNNN', 'SEQ2': 'TAANNNNN'}
// Only the values that were connected to the original dictionary
// changed within the shallow copy.
>>> shallowdict
{'SEQ1': 'ANNNCCCTAANNNNN', 'SEQ2': 'TAARKIQ'}
// However, the same is observed with the deep copy. Should
// these be unchanged?
>>> deepdict
{'SEQ1': 'ANNNCCCTAANNNNN', 'SEQ2': 'TAARKIQ'}
Я уверен, что это проблема с моим расширением C, которое я на самом деле не писал (просто портировал на Python3), и я могу поделиться этим кодом, если это поможет. Но подумал, что метод глубокого копирования python не будет так себя вести, и мне было интересно, что я что-то упустил или это какая-то ошибка.