#python
#python
Вопрос:
num= {1:'a',2: 'z'}
a='{} is {}'.format(num[1],num[2])
num[1] = "hello"
Могу ли я узнать, почему переменная ‘a’ по-прежнему совпадает со старой, хотя я заменил ее другими словами, используя срез num[1] ?
print(a)
>>>
a is z
num
>>>
{1: 'hello', 2: 'z'}
Комментарии:
1. Потому
a
что был создан с предыдущими значениями вnum
.num[1]
является мгновенным, это не ссылка на то1
num
, на что может измениться значение th в в любой момент времени, и строки в любом случае неизменяемы.2.
num[1] = "hello"
должно быть, перед форматированием строки3. Поскольку вы никогда не меняли переменную
a
после того, как впервые определили ее, почему вы ожидали, что она изменится ?a
не имеет внутренней связи сnum
Ответ №1:
Причина этого в том, что вы определили a перед изменением своего словаря, порядок вашего кода в python важен.
num= {1:'a',2: 'z'}
a='{} is {}'.format(num[1],num[2])
num[1] = "hello"
print(a)
a — это z
против
num= {1:'a',2: 'z'}
num[1] = "hello"
a='{} is {}'.format(num[1],num[2])
print(a)
привет, это z
Ответ №2:
Присвоение переменной a
создает статическую строку на основе значений num[1]
и num[2]
в этой точке последовательности выполнения. Последующее обновление словаря не восстанавливает значение a
.
Если вы хотите a
изменить содержимое словаря, вам нужно сделать его исполняемой функцией или лямбдой, чтобы он переоценивался каждый раз, когда вы его используете:
num= {1:'a',2: 'z'}
def a(): return '{} is {}'.format(num[1],num[2])
print(a()) # a is z
num[1] = "hello"
print(a()) # hello is z