Форум сайта python.su
47
dnoxгде такое ограничение?
ограничение на подсчет хэша от изменяемого объекта?
Отредактировано bismigalis (Окт. 3, 2013 14:36:33)
Офлайн
0
wbtPython 2.7.5+ (default, Sep 17 2013, 15:31:50) [GCC 4.8.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> a = [1,2,3] >>> b = (a, 2, 3) >>> b ([1, 2, 3], 2, 3) >>> a = [1,2,5] >>> b ([1, 2, 3], 2, 3) >>> a [1, 2, 5] >>> id(a) 140342853651704 >>> id(b[0]) 140342853581136
b[0]
a = [1,2,5]
[1,2,5]
>>> a = [1,2,3] >>> b = (a, 2, 3) >>> b ([1, 2, 3], 2, 3) >>> a[0] = 156 >>> b ([156, 2, 3], 2, 3) >>> a [156, 2, 5] >>> id(a) 140342853651704 >>> id(b[0]) 140342853651704
Отредактировано dnox (Окт. 3, 2013 14:32:45)
Офлайн
0
bismigalis
где такое ограничение?
>>> hash([1,2,3]) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list'
bismigalisХэш же можно брать на основе id, который остается постоянным.
нельзя делать ключ из изменяемой структуры, ибо иначе хеш изменится и не будет найдено значение. как иначе это может проконтролировать интерпретатор?
Офлайн
47
хеш можно брать от чего угодно
hash() это что единственная функция для вычисления хеша во вселенной. это спец функция для питона
Офлайн
0
bismigalis
хеш можно брать от чего угодно
hash() это что единственная функция для вычисления хеша во вселенной. это спец функция для питона

Офлайн
47
какой смысл делать ключом изменяемые объекты?
hash() это не дженерал пёрпес hash-функция, а для вычисления уникального значения для объекта который может быть ключом в дикте, список не может быть, поэтому для него не вычисляют а выдают ошибку
Офлайн
0
bismigalis
какой смысл делать ключом изменяемые объекты?
hash() это не дженерал пёрпес hash-функция, а для вычисления уникального значения для объекта который может быть ключом в дикте, список не может быть, поэтому для него не вычисляют а выдают ошибку
Офлайн
47
да, это намерено
таким образом разработчики питона избавляют нас от лишнего секса
в clоjure вообще все типы неизменяемые, по слухам у них там вообще никакого секса
Отредактировано bismigalis (Окт. 3, 2013 15:56:28)
Офлайн
17
dnoxПо id вычислять хэш нельзя, т.к. разные объекты могут быть равны и у них должен быть одинаковый хэш.
Что мешает в питоне брать хэш от того же id изменяемого объекта
>>> hash(1) == hash(1.0)
True
>>> hash(u"abc") == hash("abc")
True
>>> id( (1,2) )
45134032
>>> id( (1,2) )
45135592
>>> id( (1,2) )
45135512
>>> id( (1,2) )
45137232
Офлайн
75
bismigalisэто прискорбно(
по слухам у них там вообще никакого секса
Офлайн