http://habrahabr.ru/post/147281/
Обсуждаем.
Как по мне - автор не имеет ни малейшего представления, к какому гимору может привести юникод в 2.х. Хотя в чем-то он прав - изменения ради изменений в промышленной разработке не рулит.
>>> '1' == '1'[0] True >>> b'1' == b'1'[0] False
>>> b'1'==b'1'[:] True
>>> type(b'1') <class 'bytes'> >>> type(b'1'[0]) <class 'int'> >>>
А зачем так сделали?Просто в двойке префикс b' игнорируется - т.е b'l' это str.
http://docs.python.org/reference/lexical_analysis.html2.7
prefix of ‘b’ or ‘B’ is ignored in Python 2; it indicates that the literal should become a bytes literal in Python 3
>>> l = bytearray('l') >>> l[0] == l False >>> l[:] == l True >>> type(l) <type 'bytearray'> >>> type(l[0]) <type 'int'> >>> type(l[:]) <type 'bytearray'> >>> type(b'l') <type 'str'> >>> type(b'l'[0]) <type 'str'> >>> type(b'l'[:]) <type 'str'> >>> b'l' == b'l'[0] True >>> b'l' == b'l'[:] True
http://docs.python.org/library/stdtypes.html
Objects of different types, except different numeric types and different string types, never compare equal
EBFEВ моем примере речь шла о тройке. Наверно, надо было это написать, хотя тройка тут считается практически дефолт питоном.
Просто в двойке префикс b' игнорируется