Сохранить подмножество словаря в качестве новой переменной и сохранить исходный словарь - PullRequest
0 голосов
/ 30 апреля 2020

Я импортирую большие JSON файлы в виде словарей в python. Мне нужно выполнить операции с одним из ключей в словаре, который сам является списком. Я хочу сохранить оригинальный импортированный словарь (без изменений).

Я довольно неопытен с Python, но я читал, что y = x создает новую переменную y, которая ссылается на тот же объект, на который ссылается x .... что означает, что изменения, внесенные в y, также изменить исходную переменную х?

Итак, если бы я использовал

players =data["Players"]

и внес изменения в новые переменные проигрыватели, это каким-то образом изменит исходный дикт? Я проверил это и не вижу изменений, но я обеспокоен, что что-то упустил.

Нужно ли создавать копию ключа, чтобы гарантировать, что я сохраняю оригинальный словарь? И поскольку список является составным объектом, нужно ли мне создавать глубокую копию, чтобы объекты внутри тоже не являлись ссылками? То есть либо:

players = data["Players"].copy()
players = copy.deepcopy(data["Players"]) 

1 Ответ

1 голос
/ 30 апреля 2020

Вам не нужно беспокоиться об использовании copy / deepcopy, если вы укажете указанный c ключ вхождения.

Вы можете легко проверить, используя id ()

Например:

data = {
    "Players": ["p1", "p2", "p3"]
}

# creates new object - not y = x
players = data["Players"]

# references same object - yes y = x
players2 = data

print(f'data id     -> {id(data)}  \nplayers2 id -> {id(players2)} \nplayers id  -> {id(players)}')

Результаты (данные уведомления и игроки2 имеют одинаковый идентификатор):

data id     -> 140253164993728  
players2 id -> 140253164993728 
players id  -> 140253164186432
...