Форум сайта python.su
0
Всем доброго дня. Всегда думал, что основная разница между изменяемыми и неизменяемыми типами - то что они соответственно unhashable и hashable. Но недавно узнал, что это не совсем так. Так вот возник вопрос, с какой целью идет разделение на изменяемые и неизменяемые типы? В частности, на примере tuple и list. Я, конечно, предполагаю что tuple лучше использовать для каких-то констант/данных, изменение которых нежелательно, но хотелось бы более развернутого ответа.
Ну и второй вопрос: где можно почитать про механизм подсчета хэша объекта-ключа при создании словаря?
Офлайн
75
dnoxhttp://hg.python.org/cpython/file/1cb0c05d71af/Objects/dictobject.c
Ну и второй вопрос: где можно почитать про механизм подсчета хэша объекта-ключа при создании словаря?
Офлайн
0
Singularity
http://hg.python.org/cpython/file/1cb0c05d71af/Objects/dictobject.c
Офлайн
47
основное отличие, неизменяемые могут быть ключом в словаре
Офлайн
0
bismigalisЯ тоже так думал, на этом и попался.
основное отличие, неизменяемые могут быть ключом в словаре
([1,2,3], 4 , 5)
Отредактировано dnox (Окт. 3, 2013 13:47:57)
Офлайн
47
dnoxа это что неизменяемая структура?([1,2,3], 4 , 5)
Отредактировано bismigalis (Окт. 3, 2013 13:54:00)
Офлайн
0
bismigalisНу, так как это все еще tuple, то я предполагаю, что да.
а это что неизменяемая структура?
Отредактировано dnox (Окт. 3, 2013 13:58:49)
Офлайн
47
часть этого тупла может измениться значит нет.
Офлайн
0
bismigalisОк. Поправьте, если я не прав:
часть этого тупла может измениться значит нет.
Офлайн
6
Python 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
>>> a = [1,2,3]
>>> b = (a,2,3)
>>> id(a)
140342853651704
>>> id(b[0])
140342853651704
Офлайн