ctype.c_long.from_address возвращает случайное значение для некоторых входных данных - PullRequest
0 голосов
/ 05 января 2020

См. Этот код:

>>> import ctypes
>>> x=12345
>>> y=x
>>> ctypes.c_long.from_address(id(x)).value
2
>>> a=2
>>> b=a
>>> ctypes.c_long.from_address(id(a)).value
116
>>>

для объекта x он вернул ожидаемый результат, но для "a" он вернул неожиданный результат

1 Ответ

0 голосов
/ 06 января 2020

«Ожидаемое значение» - это пересчет выделенного объекта.

Когда вы присвоили x, вы выделили новый int объект. Вы взяли другую ссылку и не удивились, увидев приращение счета на 1.

Когда вы присвоили a, вы взяли ссылку на существующий объект. Интерпретатор cPython предварительно создал кэш из более чем двухсот маленьких целых чисел, а затем модули, которые вы import редактировали, взяли ссылки на некоторые из них. Ваш пример вывода просто говорит, что существует более сотни ссылок, cf Что с целочисленным кэшем, поддерживаемым интерпретатором? .

...