Горизонталью называется замкнутая кривая линия, все точки которой имеют одну и ту же высоту над поверхностью, принятой за начальную. При каких обстоятельствах одинаковые строки имеют одну и ту же ссылку? Имеют одну и ту
Я искал веб-страницы и переполнял вопросы, но не смог найти ответ на этот вопрос. Наблюдение, которое я сделал, заключается в том, что в Python 2.7.3, если вы назначили две переменные одной и той же одиночной символьной строкой, например
>>> a = "a" >>> b = "a" >>> c = " " >>> d = " "
Затем переменные будут иметь одну и ту же ссылку:
>>> a is b True >>> c is d TrueЭто справедливо и для некоторых более длинных строк:
>>> a = "abc" >>> b = "abc" >>> a is b True >>> " " is " " True >>> " " * 1 is " " * 1 True
>>> a = "ac" >>> b = "ac" >>> a is b False >>> c = " " >>> d = " " >>> c is d False >>> " " * 2 is " " * 2 False
Может кто-нибудь объяснить причину этого?
Я подозреваю, что могут быть упрощения / замены, сделанные интерпретатором и / или некоторым механизмом кэширования, который использует тот факт, что строки неизменяемы для оптимизации в некоторых особых случаях, но что я знаю? Я попытался сделать глубокие копии строк, используя конструктор str и функцию copy.deepcopy, но строки по-прежнему несовместимы с ссылками.
Причина, по которой у меня возникают проблемы, заключается в том, что я проверяю неравенство ссылок на строки в некоторых модульных тестах, которые я пишу для методов клонирования классов python нового стиля.
3 Solutions collect form web for “При каких обстоятельствах одинаковые строки имеют одну и ту же ссылку?”
Детали того, когда строки кэшируются и используются повторно, зависят от реализации, могут меняться от версии Python до версии Python и на нее нельзя положиться. Если вы хотите проверить строки для равенства, используйте == , а не.
В CPython (наиболее часто используемая реализация Python) строковые литералы, которые встречаются в исходном коде, всегда интернированы, поэтому, если один и тот же строковый литерал встречается дважды в исходном коде, они в конечном итоге указывают на один и тот же строковый объект. В Python 2.x вы также можете вызвать встроенную функцию intern() чтобы заставить интернатуру определенной строки, но вы на самом деле этого не должны делать.
Измените фактическую цель проверки того, неправильно ли распределены атрибуты между экземплярами: этот вид проверки полезен только для изменяемых объектов. Для атрибутов неизменяемого типа семантическая разность между общими и неразделенными объектами отсутствует. Вы можете исключить неизменяемые типы из своих тестов, используя
Immutable = basestring, tuple, numbers.Number, frozenset # ... if not isinstance(x, Immutable): # Exclude types known to be immutable
Обратите внимание, что это также исключает кортежи, содержащие изменяемые объекты. Если вы хотите протестировать их, вам нужно будет рекурсивно спуститься в кортежи.
В CPython в качестве детали реализации пустая строка является общей, как и односимвольные строки, код которых находится в диапазоне Latin-1. Вы не должны зависеть от этого, так как это возможно обойти эту функцию.
Вы можете запросить строку для интернирования с использованием sys.intern ; это произойдет автоматически в некоторых случаях:
Обычно имена, используемые в программах Python, автоматически интернированы, а словари, используемые для хранения атрибутов модуля, класса или экземпляра, имеют интернированные ключи.
sys.intern выставляется так, что вы можете использовать его (после профилирования!) для производительности:
Внутренние строки полезны для получения небольшой производительности при поиске в словарях – если ключи в словаре интернированы, а ключ поиска интернирован, сопоставление ключей (после хэширования) может быть выполнено с помощью сравнения указателей вместо сравнения строк.
Обратите внимание, что intern является встроенным в Python 2.
Я думаю, что это реализация и оптимизация. Если строка короткая, они могут (и часто?) «Разделяться», но вы не можете зависеть от этого. Как только у вас будет больше строк, вы увидите, что они не совпадают.
In : s1 = "abc" In : s2 = "abc" In : s1 is s2 Out: True
более длинные строки
In : s1 = "abc this is much longer" In : s2 = "abc this is much longer" In : s1 is s2 Out: False
используйте == для сравнения строк (а не оператора is).
Наблюдение / гипотеза OP (в комментариях ниже) о том, что это может быть связано с количеством токенов, похоже, подтверждается следующим:
In : s1 = "abc" In : s2 = "abc" In : s1 is s2 Out: False
если сравнивать с исходным примером abc выше.
Задача по физике - 2379
2017-03-16
Два одинаковых шара имеют одну и ту же температуру. Один из шаров находится на горизонтальной плоскости, другой подвешен на нити. Обоим шарам передают одинаковое количество теплоты. Процесс нагревания идет так быстро, что не происходит потерь теплоты на нагревание соседних предметов и окружающей среды. Одинаковы или различны будут температуры шаров после нагревания? Ответ обоснуйте.
Решение:
рис.1
рис.2
Различие будет связано с поведением центров масс шаров.
Пусть прн нагревании шаров их объемы увеличиваются. В этом случае высота центра масс первого шара над горизонтальной плоскостью увеличится (рис. 1), а центр масс подвешенного шара опустится (рис. 2).
На основании первого закона термодинамики можно записать:
а) $Q = cm \Delta T_{1} + mgh, \Delta T_{1} = \frac{Q - mgh}{cm}$;
б) $Q = cm \Delta T_{2} - mgh, \Delta T_{2} = \frac{Q + mgh}{cm}$;
где $x$ - удельная теплоемкость вещества, из которого изготовлен шар, $m$ - его масса.
Отсюда следует, что $\Delta T_{2} > \Delta T_{1}$, т. е. висящий шар должен нагреться до более высокой температуры, чем шар, лежащий на горизонтальной поверхности. Оценим полученный эффект. Пусть радиус шара $R$, а коэффициент линейного расширения материала, из которого изготовлен шар, равен $\alpha$. Тогда отношение изменения температуры шара за счет изменения положения его центра масс к изменению температуры $\Delta T$ за счет сообщения ему количества теплоты $Q$ будет равно
$\frac{ \Delta T^{ \prime}}{ \Delta T} = \frac{mgh}{cm \Delta T} = \frac{mgR \alpha \Delta T}{cm \Delta T} = \frac{g}{c} R \alpha$.
Подсчитав оценочные значения, например, для железного шара радиуса $R = 0,1 м (c=450 Дж/(кг \cdot К), \alpha = 11,7 \cdot 10^{-6} К^{-1})$, получим: $\Delta T^{ \prime} / \Delta T = 2,6 \cdot 10^{-8}$.
Таким образом, обсуждаемый в задаче эффект ничтожно мал и лежит за пределами возможности экспериментального обнаружения.
Рисунок 3.2 - Образование горизонталей
береговую линию в точках Б. Спроектировав ее на ту же плоскость Р, получим вторую замкнутую кривую линию ББ. Продолжая подъем воды в такой же последовательности выше, на плоскости Р получим изображение возвышенности с помощью горизонталей.
Для большей наглядности направление понижения скатов показывается черточками, называемыми бергштрихами. Для указания высот горизонталей их отметки подписывают в разрывах горизонталей, располагая верх цифр по направлению верха ската. Для большей выразительности рельефа, как правило, пятая, а иногда десятая горизонталь утолщаются.
Разность высот двух соседних горизонталей называется высотой сечения рельефа.
Расстояние между двумя смежными горизонталями на плоскости называется заложением.
Горизонтали обладают следующими свойствами:
- а) все точки, лежащие на одной и той же горизонтали, имеют одинаковую высоту;
- б) все горизонтали должны быть непрерывными;
- в) горизонтали не могут пересекаться или раздваиваться;
- г) расстояния между горизонталями в плане характеризуют крутизну ската - чем меньше расстояние (заложение), тем круче скат;
- д) кратчайшее расстояние между горизонталями соответствует направлению наибольшей крутизны ската;
- е) водораздельные линии и оси лощин пересекаются горизонталями под прямыми углами;
- ж) горизонтали, изображающие наклонную плоскость, имеют вид параллельных прямых.
Часто для уточнения форм рельефа применяют дополнительные горизонтали, которые изображаются штрихпунктирными линиями и называются полугоризонталями. Обычно полугоризонтали принято проводить в тех случаях, когда расстояние между горизонталями на плане превышает 2 см. На рис. 3.1, б показано изображение горизонталями отдельных элементов местности.
Похожие статьи
-
Разработка алгоритма введения системы оценки качества образовательных услуг в доу методическая разработка на тему Апробация и внедрение результатов исследования
ОЦЕНКА КАЧЕСТВА ОБРАЗОВАТЕЛЬНЫХ УСЛУГ В СРЕДНИХ ШКОЛАХ ГОРОДА МОСКВЫ 1. Совершенствование системы управления качеством образовательных услуг средних школ города Москвы ВВЕДЕНИЕ 2ГЛАВА 1. ТЕОРЕТИЧЕСКИЕ ОСНОВЫ УПРАВЛЕНИЯ КАЧЕСТВОМ...
-
К чему приведёт географию новая концепция?
В начале ноября в Ломоносовском корпусе Московского государственного университета имени М.В.Ломоносова прошел второй Всероссийский съезд учителей географии. В работе съезда приняли участие более 550 учителей географии, методистов,...
-
Словообразование Введение в тему через орфографический диктант
Слова состоят из минимальных (далее неделимых) значимых частей, называемых морфемами (от греч. morphe - форма): корней, приставок, суффиксов и окончаний. Учение о значимых частях слова (морфемах) называется морфемикой . По своей роли,...
-
Асы второй мировой войны Асы люфтваффе второй
…эскадра за довольно короткий период времени потеряла 80 летчиков, из которых 60 так и не сбили ни одного русского самолета/Майк Спик «Асы люфтваффе»/ С оглушительным грохотом рухнул «Железный занавес», и в средствах массовой информации...
-
Военные конфликты малой интенсивности Силы обороны самой маленькой страны «Перешейка»
Гондурас и Сальвадор начали испытывать друг к другу неприязнь задолго до чемпионата мира по футболу 1970 года. Среди стран Центральной Америки эти два государства, граничащие между собой, никогда не отличались теплотой отношений, даже...
-
Высказывания о людях Понять себя цитаты
Чтобы понять что-либо, нам необходимо получить об этом как можно больше информации, посмотреть на это с разных точек зрения и представить в своей голове, как всё это выглядит. К примеру, мы знаем, что тела, обладающие массой, притягиваются...