Также для тех, кто интересуется: символы в Ruby при использовании в хэше очень похожи на пустые объекты в python. Например, вы можете сделать:
some_var = object()
и затем установите ключ словаря как some_var:
some_dict = { some_var : 'some value' }
, а затем выполните стандартный поиск:
some_dict[some_var]
Однако, как отметил sepp2k, в этом нет никакого выигрыша в производительности. На самом деле я провел быстрый тест и отметил, что производительность почти не возрастает:
a, b, c, d, e = [object() for _ in range(5)]
dict_symbols = {a : 'a', b : 'b', c : 'c', d : 'd', e : 'e'}
dict_strings = {'a' : 'a', 'b' : 'b', 'c' : 'c', 'd' : 'd', 'e' : 'e'}
def run_symbols():
for key in dict_symbols.keys():
dict_symbols[key]
def run_strings():
for key in dict_strings.keys():
dict_strings[key]
Скорость, проверенная в ipython:
In [3]: %timeit run_symbols
10000000 loops, best of 3: 33.2 ns per loop
In [4]: %timeit run_strings
10000000 loops, best of 3: 28.3 ns per loop
Так что в моем случае «символы» работают медленнее! (для забавных чисел, не точных). Однако следует отметить, что, вероятно, есть преимущества памяти, чтобы сделать это таким образом. Если вас не интересуют объекты типа ключа, они занимают меньше места, чем строки.
import sys
sys.getsizeof('some_var') # 45
some_var = object()
sys.getsizeof(some_var) # 0
Хотя это поднимает вопрос о том, как python обрабатывает память с именем переменной some_var.