Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 04.04.2018, 06:27   #1
polin11
Форумчанин
 
Регистрация: 07.06.2015
Сообщений: 84
Репутация: -53
По умолчанию string1 is string2

Помогите разобраться с вопросом Python 3.3
print([1,2,3] is [1,2,3]) # false
print("1,2,3" is "1,2,3") #true
Why are thee different return values
Answer:
1) list are not evaluted as equal, because elements of list may be changed in place
2) every sequence object is unique, even if two sequence objects contain the same elements
3) string values are an immutable sequence type in Python, and so two equal strings always refer to the same object
4) strings are immutable objects and Python shares values for immutable values whenever
possible
5) for string comparisons id is internally implemented as an alias for "=="

Насколько понимаю оператор is проверяет идентичность объекта,
Python проверяет, являются ли два строковых объекта string1 и string2 действительно одним и тем же объектом
(т. Е. живут по одному и тому же адресу в памяти).
Python создает только один строковый объект, и на него могут ссыласться 2 переменные.
Причина в том, что Python внутренне кэширует и использует несколько строк в качестве оптимизации,
на самом деле в памяти есть только одна строка.
Если использовать более длинные строки, то string1 is string2 будет false (по крайней мере это выполнялось в python 2.)
Но в python 3.3 сколько бы я не увеличивал размер строк string1 is string2 будет true
polin11 вне форума   Ответить с цитированием
Старый 30.04.2018, 21:03   #2
Somebody
Профессионал
 
Регистрация: 08.10.2007
Адрес: Нижегородская обл.
Сообщений: 1,185
Репутация: 801
По умолчанию

Идентичные строки в пределах одного модуля, выражения в repl или ещё чего-то подобного, что сначала компилируется в байт-код, часто ссылаются на один объект, не только в Python.
Код:

s = "1,2,3"
s is "1,2,3"

отдельными строками в repl вернёт False с большей вероятностью,
Код:

"1,2,3" is "1,2,3!"[:-1]

с ещё большей. Но это всё равно зависит от реализации.
Somebody вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Си] В String1 удалить все слова, встречающиеся в String2 и String3 одновременно. 4Fun Помощь студентам 0 22.02.2010 20:17


16:17.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru