@skymike

Как понять поведение словаря?

Есть словарь созданный вручную
dch = {0:'0', 1:'1', 2:'2', 3:'3', 4:'4', 5:'5', 6:'6', 7:'7', 8:'8', 9:'9'}

и словарь который создан генератором
dch2 = {x: str(x) for x in range(10)}
в итоге имею два идентичных словаря, содержащих строковые значения
>>> type(dch)
<class 'dict'>
>>> type(dch2)
<class 'dict'>
>>> type(dch[5])
<class 'str'>
>>> type(dch2[5])
<class 'str'>
>>> dch[5]
'5'
>>> dch2[5]
'5'

но одно но, если сделать сравнение со значением из сделаного вручную словаря то все работает, возвращается True, а вот если сравнивать со словарём из генератора False хотя значения сходятся
>>> dch[5] is '5'
True
>>> dch2[5] is '5'
False

Почему так? ведь словари одинаковые получаются и значения в них одного, строкового типа, и сравниваются со строкой.
И если добавить в сгенерируемый словарь вручную значение строковое то оно проходит сравнение коректно, остальные значения которые из генератора нет.
>>> dch2[10] = '10'
>>> dch2[10] is '10'
True
>>> dch2[9] is '9'
False
>>>
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ответы на вопрос 1
@immaculate
Программист-путешественник
Как sim3x написал, is проверяет равенство не значения, а ссылки. Вы такое же поведение даже с целыми получить можете: https://stackoverflow.com/questions/15171695/whats...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы