考慮下面的類:設置變異方法是否保留當前元素?
class MyObj:
def __init__(self, key, value):
self.key = key
self.value = value
def __key(self):
return self.key
def __hash__(self):
return hash(self.__key())
def __eq__(self, other):
return type(self) is type(other) and self.__key() == other.__key()
set1 = {MyObj(1,'a'), MyObj(3,'a'), ...}
set2 = {MyObj(1,'b'), MyObj(2,'b'), ...}
能夠保證所有的set1 &= set2
後,set1
是{MyObj(1,'a'), ...}
而不是MyObj(1,'b'), ...
。
是否也適用於其他突變方法,如union_update
,difference_update
?
更新: 如果您需要保留左邊的元素,採用以下方式:
set1 -= (set1-set2)
什麼? ...集合是無序的...和不可變的...因此,我完全被你的問題困惑 –
@JoranBeasley呃..集合是可變的,'frozenset's是不可變的。 – roippi
ahh哎呀..對不起,即使發瘋,你對他們的可變性完全正確......但我堅持我早先所說的「什麼?」。 ...也是'&='是交集,所以我期望'set1&= set2'導致'set1 = {}',因爲沒有交集...... –