Найти - Пользователи
Полная версия: Работа с set'ами , операции &= и |=
Начало » Python для новичков » Работа с set'ами , операции &= и |=
1
mazaycheck
Добрый вечер, я уже несколько часов мучаюсь и не могу найти ответ на свой вопрос, либо не знаю как его задать. Я недавно стал изучать 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?
FishHook
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)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB