Ardling
Фев. 27, 2010 13:29:01
Не могу нигде найти информации как в питоне сделать что-то вроде ссылки на объект. Более конкретно - нужно обращаться к одному экземпляру объекта, из нескольких функций в многопоточном режиме. Нашел упоминание о такой штуке как aliasing, но не могу найти инфу по теме.
Ferroman
Фев. 27, 2010 13:51:23
Передать как элемент списка, например.
Ardling
Фев. 27, 2010 13:53:24
А более тривиального способа не предусмотрено? Мне такой прием представляется костылем ).
Андрей Светлов
Фев. 27, 2010 16:40:37
>>> a = object()
>>> b = a
>>> a is b
True
Что вам еще нужно?
pasaranax
Фев. 27, 2010 18:58:35
А вот в этом случае:
In [1]: a = 1
In [2]: b = 1
In [3]: a is b
Out[3]: True
это питон автоматически сослал два имени на один объект?
добавлено:
а вот это совсем непонятно :)
In [1]: a = 1
In [2]: b = 1
In [3]: a is b
Out[3]: True
In [4]: a = 1000000
In [5]: b = 1000000
In [6]: a is b
Out[6]: False
In [7]: a = 1
In [8]: b = 1
In [9]: a is b
Out[9]: True
bazooka
Фев. 27, 2010 19:01:08
инты вроде и строки до какойто длины кешируюца
pasaranax
Фев. 27, 2010 19:02:26
Спасибо, это все объясняет
Ardling
Фев. 28, 2010 10:18:00
Спасибо за комментарии. Пошел учить матчасть)
Dimka665
Март 1, 2010 11:37:35
хеш тут не причем. имхо, просто в шелле питон не создает вторую единичку, а использует ссылку на первую, и почему-то не делает этого для 1000000.
Андрей Светлов
Март 1, 2010 15:25:07
Как же кеш не при чем? Смотрите
http://svn.python.org/view/python/trunk/Objects/intobject.c?view=markup, PyObject* PyInt_From_Long(long).
Если число в диапазоне [-NSMALLNEGINTS, NSMALLNEGINTS) - оно берется именно из кеша. NSMALLNEGINTS - немного меньше сотни, кажется.