2015-12-18 4 views
1

У меня есть словарь a.Проблема с вложенными словарями в Python

a = {1: 'a', 2: 'b'} 

И я имел некоторый словарь В с в качестве значения

b = {1: a} 

Если я печатаю б, изменить затем распечатать б снова, например:

print(b) 
a[1] = 'd' 
print(b) 

я получаю следующие:

{'a': {1: 'a', 2: 'b'}} 
{'a': {1: 'd', 2: 'b'}} 

Почему t его случилось? Автоматически обновляется ли файл, если вы установите значение переменной и затем обновите его? Благодарю.

+0

№ Значение в словаре 'b' указывает на переменную' a'. Любое изменение последнего отразится на первом. Если вы хотите, чтобы они были отдельными, просто скопируйте словарь: 'b = {1: a.copy()}' – Alexander

+0

Обратите внимание, что 'a.copy()' является мелкой копией. Мутации для значений 'a.copy()' будут видны через 'a'. – user2357112

+0

Сделайте это. 'print (id (a)); print (id (b ['a'])) 'Посмотрите, что они оба являются одним и тем же объектом? Поэтому, если вы меняете объект через любую ссылку, независимо от того, как вы обращаетесь к этому объекту, он будет изменен. См. Также [это объяснение] (http://foobarnbaz.com/2012/07/08/understanding-python-variables/) –

ответ

0

Если писать,

b = {1: a} 

значение 1, то есть a, относится к словарю, которые ранее были определены. Поэтому любое изменение, которое вы делаете в словаре a, будет отражено в словаре b. Литерал a в словаре b - всего лишь ссылочный объект для словаря a.

-2

a, a dict, содержит ссылку на словарь {1: 'a', 2: 'b'}. любые изменения, которые вы отражаете в словаре.

Поскольку все в python является объектом, подразумевается, что каждая переменная является просто ссылкой.

Следовательно, из-за изменения в dict после first print(b)second print(b) отличается.