Comments 15
У Вас написано довольно много ереси и глупостей:
Касательно именно чисел Вам надо почитать, что такое free list.
1. Любые данные в Python это об<ъекты.
2. Если объекты «одинаковы», то они хранятся по одному адресу в памяти. Иными словами, a == b и id(a) == id(b) это эквивалентные утверждения.
>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> a == b
True
>>> id(a) == id(b)
False
Касательно именно чисел Вам надо почитать, что такое free list.
Статья — бред.
Если тема действительно интересна, начать копать нужно, как минимум, с изучения исходников питона, но если это слишком сложно, то можно просто погуглить. Вот первая достаточно интересная ссылка по теме: stackoverflow.com/questions/132988/is-there-a-difference-between-and-is-in-python
Если тема действительно интересна, начать копать нужно, как минимум, с изучения исходников питона, но если это слишком сложно, то можно просто погуглить. Вот первая достаточно интересная ссылка по теме: stackoverflow.com/questions/132988/is-there-a-difference-between-and-is-in-python
А почему надо смотреть исходники? У каждого промышленного ЯП есть стандарт где все описывается а уж компилятор или компиляторы его реализую. Так что надо не исходникам лазить, а доки читать.
Под катом — статья про то как в Python реализовано хранение данных в памяти
И простыня полного бреда со «срывом покровов» и «сенсационными заявлениями» вида:
Более сложной оптимизации не используется
Причём все это «методом тыка», умозрительные (и неверные!) заключения вообще ни о чём.
В питоне со стандартами не всё так хорошо. К тому же наш автор пишет (сам того не осознавая) о CPython, а не о питоне. А CPython, как любой компилятор/интерпретатор использует кучу хаков (например, кэширование integers) и это нормально, только вот я сомневаюсь, что в стандартах языка такие вещи вообще целесообразно описывать. Один компилятор/интерпретатор делает так, другой — иначе.
А вот маленькая статья о кешировании чисел в питоне
Автор, сделайте
print(id(257))
print(id(257))
Поясню — кэшируюруются числа с -5 до 256
github.com/python/cpython/blob/c71e8b81f1f4d349d1a24a6fe162cbbecedff8f0/Objects/longobject.c#L12-L17
github.com/python/cpython/blob/c71e8b81f1f4d349d1a24a6fe162cbbecedff8f0/Objects/longobject.c#L12-L17
Иными словами, a == b и id(a) == id(b) это эквивалентные утверждения.
Из id(a) == id(b) следует a == b, обратное не верно
Нет. Вы можете переопределить
. В CPython и jython картина точно такая же. IronPython покажет два
__eq__
любым угодным вам способом. Другой вопрос, что в ряде мест (к примеру, при сравнении списков) применяется сравнение id()
перед сравнением объектов: есть известный пример с NaN, или вот ещё:Python 2.7.8 (a980ebb26592ed26706cd33a4e05eb45b5d3ea09, Nov 28 2014, 06:20:07)
[PyPy 2.4.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>> class NE(object):
.... def __eq__(self, other):
.... return False
....
>>>> n = NE()
>>>> [1, 2, n] == [1, 2, n]
True
>>>> n == n
False
. В CPython и jython картина точно такая же. IronPython покажет два
False
, но у него всегда были проблемы с совместимостью.возвращайтесь к Си
Почему не удаляют статью такого низкого качества, это очень коварно.
Sign up to leave a comment.
Память и числа в Python