Уведомления

Группа в Telegram: @pythonsu

#1 Май 26, 2019 19:16:34

mazaycheck
Зарегистрирован: 2019-05-26
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа с set'ами , операции &= и |=

Добрый вечер, я уже несколько часов мучаюсь и не могу найти ответ на свой вопрос, либо не знаю как его задать. Я недавно стал изучать Python и сейчас разбираю работу с set'ами. и операциями над ними
Немного поигравшись с кодом, хочу понять как работают операции объединения и пересечения, я написал небольшой пример, если кто поможет объяснить почему программа себя так ведет, а
именно работа операций объединение &= и пересечения |=

 array_of_sets = [{'a', 'b', 'c'}, {'a', 'c', 'd', 'e'}, {'a', 'y', 'z'}]
x = array_of_sets[0]
y = array_of_sets[0]
n = array_of_sets[0]
m = array_of_sets[0]
for i in array_of_sets:
    x &= i
    n = n & i
    y |= i
    m = m | i
print(x, n)
print(y, m)
на выводе имеем:
 {'a', 'z', 'y'} {'a'}
{'a', 'z', 'y'} {'a', 'z', 'd', 'y', 'b', 'e', 'c'}
почему результаты одних и тех же операций разный? Разве se1t &= set2 не равносильно set1 = set1 & set2?

Отредактировано mazaycheck (Май 26, 2019 19:29:35)

Офлайн

#2 Май 26, 2019 19:47:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Работа с set'ами , операции &= и |=

mazaycheck
Ваша ошибка вот в этом

 x = array_of_sets[0]
y = array_of_sets[0]
n = array_of_sets[0]
m = array_of_sets[0]
Множества - ссылочный тип, здесь вы не создали четыре разных множества, вы скопировали ссылку на одно и то же множество, по сути все ваши четыре переменные оперируют одной и той же ячейкой памяти.

 x &= i
n = n & i

первая строка аналогична вызову x.intersection_update(i) - изменяет переменную x
а вторая создает новую переменную, равную x.update(i)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version