Не изменять производные переменные - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь изменить файл json с несколькими функциями.

Я загружаю свой начальный json как:

entry_file = json.loads("insert formatted str")

Я добавляю различные поля в новый dict, созданный с помощью таких функций, как:

def add_specificfield(object_to_modify, field_name, field_value):
        object_to_modify["field_name"] = field_value
        return(object_to_modify)

Другие функции включают в себя циклы и т. д. c и т. c .. каждый раз, когда я хочу проверить вывод, я пропускаю свой входной файл через функцию, но создаю переменная «copy», чтобы избежать перезагрузки «entry_file» непосредственно перед этим, поэтому я делаю entry_file_copy = entry_file

Когда я вызываю функцию и передаю entry_file, она изменяет и entry_file, и entry_file_copy.

Есть ли способ избежать этого?

1 Ответ

1 голос
/ 29 января 2020

Если переменные являются изменяемыми (например, диктанты или списки), a = b означает, что a и b теперь ссылаются на одну и ту же базовую память (подумайте, C указатели, если вы с ними знакомы).

Если вам нужна реальная копия (другая память), вы должны использовать entry_file.copy ().

Если файл entry_file сам содержит изменяемые объекты, вам может понадобиться entry_file.deepcopy () или рекурсивно столкнуться с той же проблемой. См. Do c для более подробной информации https://docs.python.org/3.8/library/copy.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...