dnoxгде такое ограничение?
ограничение на подсчет хэша от изменяемого объекта?
нельзя делать ключ из изменяемой структуры, ибо иначе хеш может изменится и не будет найдено значение. как иначе это может проконтролировать интерпретатор?
dnoxгде такое ограничение?
ограничение на подсчет хэша от изменяемого объекта?
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
bismigalis
где такое ограничение?
>>> hash([1,2,3]) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list'
bismigalisХэш же можно брать на основе id, который остается постоянным.
нельзя делать ключ из изменяемой структуры, ибо иначе хеш изменится и не будет найдено значение. как иначе это может проконтролировать интерпретатор?
bismigalis
хеш можно брать от чего угодно
hash() это что единственная функция для вычисления хеша во вселенной. это спец функция для питона
bismigalis
какой смысл делать ключом изменяемые объекты?
hash() это не дженерал пёрпес hash-функция, а для вычисления уникального значения для объекта который может быть ключом в дикте, список не может быть, поэтому для него не вычисляют а выдают ошибку
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
bismigalisэто прискорбно(
по слухам у них там вообще никакого секса