Почему результат id () на IronPython не совпадает с результатом id () на Python? - PullRequest
1 голос
/ 13 октября 2011

Я действительно смущаю, что поведение функции id () на IronPython отличается от Python. Позвольте мне показать вам следующий код,

В IronPython:

>> s = "hello"
>> a = len(s)
>> id(a)
44
>> a = len(s)
>> id(a)
45

Как вы можете видеть, результат id () меняется при каждом вызове. В Python, однако, не будет изменено.

В Python:

>> s = "hello"
>> a = len(s)
>> id(a)
2633845
>> a = len(s)
>> id(a)
2633845

Я знаю, что функция id () возвращает идентификационный номер объекта (ID) его единственного параметра. Почему два интерпретатора Python дают мне разные результаты?

Ответы [ 2 ]

2 голосов
/ 13 октября 2011

CPython имеет кэш постоянных маленьких целых чисел, которые используются всякий раз, когда это необходимо. Этот пул целых чисел является оптимизацией и повышает производительность, поскольку при необходимости новый объект не нужно выделять для каждого небольшого целого числа. Очевидно, IronPython обрабатывает это по-разному.

Тем не менее, функция id() возвращает число, которое однозначно идентифицирует объект. Вы можете использовать это, чтобы увидеть, связаны ли два имени с одним и тем же объектом. Вы не можете использовать это значение, чтобы увидеть, являются ли два объекта "равными" в каком-либо смысле.

1 голос
/ 13 октября 2011

http://docs.python.org/library/functions.html#id

Возвращает «идентичность» объекта.Это целое число (или длинное целое), которое гарантированно будет уникальным и постоянным для этого объекта в течение его жизни.Два объекта с неперекрывающимися временами жизни могут иметь одно и то же значение id ().

Подробная информация о реализации Python: это адрес объекта в памяти.будет постоянным?

...