当x、y都是集合,且y不是x的子集时成立。
因为集合相减没有“负元素”的概念,有元素就减掉,没有就不减。所以x-(x-y)得到的是x和y的交集。
那么什么情况下y会不等于x和y的交集呢?显然,当y有x所没有的元素时,即y不是x的子集。有的答案说x和y都为非空集合才成立,其实是不对的。当x为空集时,y不能是x的子集,也就是y不能也为空集即可;当y是空集时肯定不行,因为空集是任何集合的子集。
注意浮点误差不会导致不相等,因为同一个数的误差是一致的,有的话会抵消。例如如果x=2,因为浮点误差表示为1.99999999998,那么另一个x也是1.99999999998,不会出现另一个x是2.0000000001的情况,因此x-y少减的,x-(x-y)会补回来。
x = {'a', 'b'}
y = {'a'}
print(y != x - (x - y)) # False,y是x的子集
x = {'a', 'b'}
y = {'a', 'b'}
print(y != x - (x - y)) # False,同上
x = {'a', 'b'}
y = {'a', 'c'}
print(y != x - (x - y)) # True,y不是x的子集
x = set()
y = {'a', 'b'}
print(y != x - (x - y)) # True,x为空集时,y为非空集合则一定不是其子集
x = {'a', 'b'}
y = set()
print(y != x - (x - y)) # False,y为空集时,x一定是y的超集
x = set()
y = set()
print(y != x - (x - y)) # False,同上