Сравнение со строкой Unicode в if-условии (python)

Возможный дубликат:
Python '==' и 'is' при сравнении строк, 'is' иногда не работает, почему?

Я собираюсь пропустить часть, где я рассказываю вам, как я тестировал свой код, и сразу перейду к проблеме.

У Python, похоже, возникли проблемы с сопоставлением разделения строки Unicode с другой встроенной строкой Unicode в операторе if.

>>>zone = u'domain.com.'
>>>zone[-1:]
u'.'

>>>u'.' is u'.' #works fine
True
>>> z[-1:] == u'.' #works fine
True
>>> zone[-1:] is u'.' # FAILS !
False

вот мой фактический фрагмент кода

>>>if zone[-1:] is not u'.':
>>>    #this line will always run !

если я изменю «не» на != код работает нормально!

Кто-нибудь знает, почему "есть" привело к сбою сравнения?


person guron    schedule 06.06.2011    source источник
comment
is сравнивает тождество, а не равенство.   -  person Fred Larson    schedule 07.06.2011
comment
См. stackoverflow.com /questions/1150765/, stackoverflow.com/questions/4165688/ и stackoverflow.com/questions/2988017/, чтобы назвать только три.   -  person Martijn Pieters    schedule 07.06.2011
comment
@MartijnPieters stackoverflow.com/questions/4165688/ это почти гвоздь, я думаю   -  person guron    schedule 07.06.2011


Ответы (1)


Это потому, что строки в Python являются объектами — когда вы разрезаете строку, вы создаете новую.

Это немного сложнее, чем это, но суть в этом.

Решение: используйте == и != вместо is и is not.

person Jasmijn    schedule 06.06.2011