Форум сайта python.su
20
mimoВ первом случае строка “many paths” достаточно длинная и не кэшируется, т.е. создаются два объекта. Во втором случае короткая строка “manypaths” кэшируется, и создается один объект. Поскольку строки являются неизменяемыми объектами, несколько ссылок могут безопасно ссылаться на этот один объект, что и подтверждает проверка a is b == True.
Интерпретатор в первом случае создал два объекта, а во втором один? Почему?
mimoДумаю, это потому, что в результат, возвращаемый при вызове функции sys.getrefcount(“manypaths”), входят также временно созданные ссылки на аргумент самой функции. То есть, были созданы дополнительные ссылки на строку “manypaths”, когда она была передана в функцию sys.getrefcount().
Почему sys.getrefcount(“manypaths”) отдает 4?
Отредактировано old_monty (Дек. 3, 2015 17:52:24)
Офлайн
20
Вот еще на эту тему:
>>> a = 'hello' >>> b = 'hello' >>> sys.getrefcount("hello") 4
>>> sys.getrefcount("spam") 3 >>> sys.getrefcount("tango") 3 >>> sys.getrefcount("everything") 3 >>> sys.getrefcount("sunshine") 3 >>> sys.getrefcount("Time is money") 3
Офлайн
103
ну все это зависит от версии пайтона
вот 2.7
>>> sys.getrefcount("spam") 2
Офлайн
857
>>> import sys >>> >>> sys.getrefcount('a') 12 >>> sys.getrefcount('b') 12 >>> sys.getrefcount('c') 24 >>> sys.getrefcount('d') 18 >>> sys.getrefcount('abcabc') 3 >>>
mimoЭто зависит от внутреннего состояния.
Интерпретатор в первом случае создал два объекта, а во втором один? Почему?
mimoЭто зависит от внутреннего состояния.
Почему sys.getrefcount(“manypaths”) отдает 4?
Отредактировано py.user.next (Дек. 5, 2015 02:30:31)
Офлайн