Не однозначное решение, а лишь некоторые мысли. Мы используем скрипт bash, который приводит к запуску тестов одной командой. В этом скрипте bash мы имеем это:
# environment variables
export HOME=${PWD}
yarn install
./node_modules/.bin/cypress install
./node_modules/.bin/cypress verify
./node_modules/.bin/cypress run ${SMOKETEST}
Из строки документации getrefcount :
... Обычно возвращаемое число на единицу больше чем вы могли ожидать, потому что он включает (временную) ссылку в качестве аргумента для
getrefcount ()
.
Две другие ссылки означают, что Python внутренне содержит две ссылки на объект. Может быть, словари localals () и globals () считаются одной ссылкой?
Я думаю, что он подсчитывает ссылки на 123, попробуйте другие примеры, например
>>> import sys
>>> astrd = 1
>>> sys.getrefcount(astrd)
177
>>> astrd = 9802374987193847
>>> sys.getrefcount(astrd)
2
>>>
Ссылка на 9802374987193847 соответствует ответу Codeape
Это, вероятно, потому что числа являются неизменяемыми. Если вы, например, используете список, он всегда будет равен 2 (из чистого приглашения).
Кстати, я получаю 2 на 123, возможно, ваши настройки несколько отличаются? Или это может быть связано со временем или около того?
Это не astrd
, на который ссылаются три раза, а значение 123
. astrd
- это просто имя (неизменяемого) числа 123, на которое можно ссылаться, однако, много раз. Кроме того, маленькие целые числа обычно используются совместно:
>>> astrd = 123
>>> sys.getrefcount(astrd)
4
>>> j = 123
>>> sys.getrefcount(astrd)
5
Во втором присваивании новое целое число не создается, вместо этого j
- просто новое имя для целого числа 123
.
Однако, учитывая очень большие целые числа, это не выполняется:
>>> i = 823423442583
>>> sys.getrefcount(i)
2
>>> j = 823423442583
>>> sys.getrefcount(i)
2
Общие целые числа являются деталями реализации CPython (среди прочих). Поскольку маленькие целые числа создаются очень часто, их совместное использование экономит много памяти. Это стало возможным благодаря тому факту, что целые числа неизменны в первую очередь.
Для дополнительной ссылки во втором примере, см. codeape»
целые числа реализованы особым образом, они кэшируются и разделяются, поэтому вы не получаете 1.
И python, использует объекты с подсчетом ссылок. astrd сам по себе является ссылкой, так что вы фактически получаете количество ссылок на int '123'. Попробуйте другой (определенный пользователем) тип, и вы получите 1.