Рассмотрим следующий код:
# Case 1
a = dict()
b = dict()
a = {'name': 'Bob'}
b['0'] = a
print("Initial a: ", a)
print("Initial b:", b)
print("")
a['name'] = 'Lucy'
print("Intermediate a: ", a)
print("Intermediate b: ", b)
print("")
Мы получаем наш результат:
Initial a: {'name': 'Bob'}
Initial b: {'0': {'name': 'Bob'}}
Intermediate a: {'name': 'Lucy'}
Intermediate b: {'0': {'name': 'Lucy'}}
Таким образом, при изменении значения 'a' изменяется и 'b'. Я считаю, что это связано с изменяемым символом словаря.
Теперь рассмотрим этот фрагмент:
# Case 2
a = dict()
b = dict()
a = {'name': 'Bob'}
b['0'] = a
print("Initial a: ", a)
print("Initial b:", b)
print("")
a = dict()
print("Intermediate a: ", a)
print("Intermediate b", b)
print("")
Результат:
Initial a: {'name': 'Bob'}
Initial b: {'0': {'name': 'Bob'}}
Intermediate a: {}
Intermediate b: {'0': {'name': 'Bob'}}
Почему не ' t промежуточное значение b становится пустым словарем для ключа 0 для # case 2?