Comments 9
Класс set (множество) — это одна из ключевых структур данных в Python
Класс set был предложен в PEP218 от 31-Jul-2000 и реализован в Python 2.3 (релиз July 29, 2003). И какая же это «ключевая структура», если 10 лет без неё обходились?
Нехорошо, когда статья начинается со вранья.
Хм интересный вопрос для анализа глянуть какие структуры используются в python проектах нужно будет сделать статистику. )
Кора головного мозга возникла 500 млн. лет назад, а до этого 3.5 млрд. лет без неё как-то обходились.
Однако же теперь для как минимум одного заносчивого биологического вида она стала ключевой структурой.
Этот приём будет работать аналогично методу
.union()
, но я рекомендую пользоваться именно.union()
.
А почему? Есть профит кроме читаемости?
Там сравнивается с распаковкой.
union - это встроенный метод, один вызов встроенной функции. Он сразу создаст новый словарь из двух, выполнив всю обработку внутри себя максимально оптимизировано.
А через распаковку - то надо распаковать, создать новые структуры данных, куда запишутся полученные объекты. Затем идет новый вызов, который уже из этих объектов создаст новый словарь. Потом еще надо удалить промежуточные объекты.
Кажется очевидно, какой метод будет быстрее :)
Очевидно, да неверно. Проверил. Видимо, питон в случае распаковки понимает, что от него хотят. Даже интересно стало - одинаковый байт-код там или разный. Чуть позже, может, залезу посмотрю.
Вот эти варианты у меня работают одинаково:
a = {1, 2, 3, 4}
b = {i for i in range(300)}
for i in range(10000000):
c = {*a, *b}
a = {1, 2, 3, 4}
b = {i for i in range(300)}
for i in range(10000000):
c = a.union(b)
time ./t1.py
real 0m21,734s
user 0m21,716s
sys 0m0,016s
time ./t_union.py
real 0m21,744s
user 0m21,736s
sys 0m0,008s
Код разный. Дополнительные объекты не создаются.
c = a.union(b)
0 LOAD_FAST 0 (a)
2 LOAD_METHOD 0 (union)
4 LOAD_FAST 1 (b)
6 CALL_METHOD 1
8 STORE_FAST 2 (c)
c = {*a, *b}
0 BUILD_SET 0
2 LOAD_FAST 0 (a)
4 SET_UPDATE 1
6 LOAD_FAST 1 (b)
8 SET_UPDATE 1
10 STORE_FAST 2 (c)
Во втором случае на одну команду длиннее. Но это не дает существенной разницы в быстродействии.
Исчерпывающее руководство по множествам в Python