Что будет выведено при изменение словаря через другую переменную

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}