Python
Есть ли разница между словарём и переменными в python
Будет ли разница, если создать много переменных и если создать словарь с аналогичными по названию ключами и соответствующими значениями и какая будет эта разница? Будет ли польза, оптимизация и тп?
Обращение к элементу ассоциативного массива (словаря) - это медленно.
x = 3 - один этап доступа: непосредственно к переменной x.
d['x'] = 3 - два этапа доступа: сначала к переменной d, а потом к элементу с ключом 'x' этой переменной. Даже в гипотетическом идеальном случае в Python это будет вдвое медленнее, чем обращение к переменной x.
Менять переменные на элементы ассоциативного массива - это замедлять код.
x = 3 - один этап доступа: непосредственно к переменной x.
d['x'] = 3 - два этапа доступа: сначала к переменной d, а потом к элементу с ключом 'x' этой переменной. Даже в гипотетическом идеальном случае в Python это будет вдвое медленнее, чем обращение к переменной x.
Менять переменные на элементы ассоциативного массива - это замедлять код.
Kot Kotofei
но ускоряет разработку
А почему вообще надо на это смотреть с позиции оптимизации, кто Вам внушил, что оптимизация всё, а любой другой критерий - ничто?
Но главное - не названо, что оптимизируется. Все синтаксические фичи созданы тоже для оптимизации. Оптимизации разработки. Пусть люди сами решают о степени сахаризации синтаксиса.
Оставьте им решать, пользоваться или нет, оставьте им возможность выбора
Словарь, это не только тип данных, это класс, те тип и методы работы с ним. Если согласны, что такой тип удобен, тогда вы вынуждены написать и свои методы. Значит каждый будет их писать по своему, изобретая по сути велосипед
Но главное - не названо, что оптимизируется. Все синтаксические фичи созданы тоже для оптимизации. Оптимизации разработки. Пусть люди сами решают о степени сахаризации синтаксиса.
Оставьте им решать, пользоваться или нет, оставьте им возможность выбора
Словарь, это не только тип данных, это класс, те тип и методы работы с ним. Если согласны, что такой тип удобен, тогда вы вынуждены написать и свои методы. Значит каждый будет их писать по своему, изобретая по сути велосипед
Евгений Белашов
Ну, повлияет ли это на скорость исполнения, на трату ОЗУ для программы?
Вадим Варанкин
Я всегда думал, что если где-то в 70-х там придумано, то оно уже аксиома.. Как простейшие из воды
Питоновский код компилируется "на лету" в байткод.
Обращение к переменной - это почти что (со скидкой на питоновские особенности) прямое обращение к памяти.
А при обращении к ассоциативному массиву будет выполнена туева хуча кода по поиску нужного элемента. В сравнении с обычной переменной это будет крайне медленно.
Обращение к переменной - это почти что (со скидкой на питоновские особенности) прямое обращение к памяти.
А при обращении к ассоциативному массиву будет выполнена туева хуча кода по поиску нужного элемента. В сравнении с обычной переменной это будет крайне медленно.
Kot Kotofei
да что ж такое-то, кому мешает Пайтон? Java почему-то никому в такой степени не мешала, хотя имела не меньше апологетов
Единственная претензия к Пайтону - "слишком много школоты". Так она, школота должна с++ осваивать, может react или object pascal (прости, Господи)
Единственная альтернатива - Фортран, но он останется нишевым (или элитарным) при всех раскладах.
Единственная претензия к Пайтону - "слишком много школоты". Так она, школота должна с++ осваивать, может 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
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
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()
Слабо написать и протестировать методы словарей?
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
кому очевидно, "демократической общественности"?
Похожие вопросы
- Что такое переменные и типы данных в языке python
- Как использовать переменную созданную в def во всей программе python
- Помогите пожалуйста с созданием словаря в Python 3
- Курс под названием Анализ данных на Python больше держит акцент на Big Data-у, или нет ? В чем разница между Big Data ..
- Python. Решение без функции def, словарей и списков
- Язык программирования Python, словари и множества
- Python вопрос по СЛОВАРЯМ
- Окончил курсы на степике по Python что делать дальше?
- Python программирование. Помогите написать программу.
- В чем разница между == и is в python?