Python

Есть ли разница между словарём и переменными в python

Будет ли разница, если создать много переменных и если создать словарь с аналогичными по названию ключами и соответствующими значениями и какая будет эта разница? Будет ли польза, оптимизация и тп?
Обращение к элементу ассоциативного массива (словаря) - это медленно.
x = 3 - один этап доступа: непосредственно к переменной x.
d['x'] = 3 - два этапа доступа: сначала к переменной d, а потом к элементу с ключом 'x' этой переменной. Даже в гипотетическом идеальном случае в Python это будет вдвое медленнее, чем обращение к переменной x.
Менять переменные на элементы ассоциативного массива - это замедлять код.
Yevgeniy Ko
Yevgeniy Ko
90 010
Лучший ответ
Kot Kotofei но ускоряет разработку
А почему вообще надо на это смотреть с позиции оптимизации, кто Вам внушил, что оптимизация всё, а любой другой критерий - ничто?
Но главное - не названо, что оптимизируется. Все синтаксические фичи созданы тоже для оптимизации. Оптимизации разработки. Пусть люди сами решают о степени сахаризации синтаксиса.
Оставьте им решать, пользоваться или нет, оставьте им возможность выбора
Словарь, это не только тип данных, это класс, те тип и методы работы с ним. Если согласны, что такой тип удобен, тогда вы вынуждены написать и свои методы. Значит каждый будет их писать по своему, изобретая по сути велосипед
KK
Kot Kotofei
66 495
Евгений Белашов Ну, повлияет ли это на скорость исполнения, на трату ОЗУ для программы?
Вадим Варанкин Я всегда думал, что если где-то в 70-х там придумано, то оно уже аксиома.. Как простейшие из воды
Питоновский код компилируется "на лету" в байткод.
Обращение к переменной - это почти что (со скидкой на питоновские особенности) прямое обращение к памяти.
А при обращении к ассоциативному массиву будет выполнена туева хуча кода по поиску нужного элемента. В сравнении с обычной переменной это будет крайне медленно.
AK
Abit Khasenov
58 291
Kot Kotofei да что ж такое-то, кому мешает Пайтон? Java почему-то никому в такой степени не мешала, хотя имела не меньше апологетов
Единственная претензия к Пайтону - "слишком много школоты". Так она, школота должна с++ осваивать, может react или object pascal (прости, Господи)
Единственная альтернатива - Фортран, но он останется нишевым (или элитарным) при всех раскладах.
from time import time
from sys import getsizeof

a,b,c = 0,0,0
D = {a:0, b:0, c:0}
N = 1000_000
stt = time()
for i in range(N): a,b,c = i, i+1, i+2
print(time()-stt)

stt = time()
for i in range(N): D[a], D[b], D[c] = i, i+1, i+2
print(time()-stt)

print(getsizeof(a), getsizeof(b), getsizeof(c))
print(getsizeof(D[a]), getsizeof(D[b]), getsizeof(D[c]))
print(getsizeof(D))

==================
0.42705440521240234
0.7956011295318604
28 28 28
28 28 28
240
>>>

Этот же код на
https://ideone.com/z9Bbkz
stdout
0.16907310485839844
0.2373521327972412
28 28 28
28 28 28
240
Алексей Минин
Алексей Минин
21 729
Kot Kotofei удобство словаря не в его быстром заполнении, а в извлечении данных по ключу. Для создания энциклопедий привлекаются туча специалистов, чтобы по результату их работы любой мог быстро отыскать интересующие его данные
Слабо написать и протестировать методы словарей?
dict.clear()
dict.copy()
classmethod dict.fromkeys(seq[, value])
dict.get(key[, default])
dict.items()
dict.keys()
dict.pop(key[, default])
dict.popitem()
dict.setdefault(key[, default])
dict.update([other])
dict.values()
По-моему, достаточно очевидно, что лучше использовать всё-таки переменные
Kot Kotofei кому очевидно, "демократической общественности"?