18. Что будет выведено при изменение словаря через другую переменную
Условие задачи Дан словарь, который присваивается второй переменной. Необходимо определить, что будет выведено после изменения словаря через вторую переменную.
a = {'a': 1}
b = a
b['b'] = 2
print(f"{a = }")
print(f"{b = }")
Спойлеры к решению
Подсказки
- Словарь — изменяемый объект.
- При выполнении
b = aновый словарь не создаётся. - Переменные
aиbначинают ссылаться на один и тот же объект. - Поэтому изменение через
bтакже видно черезa. - Операция
b['b'] = 2добавляет новый ключ в общий словарь.
Решение
a = {'a': 1}
b = a
b['b'] = 2
print(f"{a = }")
print(f"{b = }")
Результат:
a = {'a': 1, 'b': 2}
b = {'a': 1, 'b': 2}
После строки:
b = a
переменные a и b указывают на один и тот же словарь.
Поэтому при изменении:
b['b'] = 2
меняется не отдельная копия, а исходный объект словаря. Из-за этого при выводе a и b результат будет одинаковым.
Проверить это можно так:
print(a is b) # True
Если нужен отдельный словарь, нужно сделать копию:
a = {'a': 1}
b = a.copy()
b['b'] = 2
print(f"{a = }") # a = {'a': 1}
print(f"{b = }") # b = {'a': 1, 'b': 2}