s.difference(t)返回一个在t中没有元素的新集合。
s.difference_update(t)返回t中没有元素的更新集。
这两种方法有什么区别?由于difference_update更新集的设置,应该采取哪些预防措施来避免从此方法接收任何结果?
就速度而言,set.difference_update不应该更快吗?因为您只是从set s中删除元素,而不是创建像set.difference()这样的新集合。
发布于 2014-12-12 08:04:43
Q.这两种集合方法有什么区别?
A.更新版本从现有的集合中减去,对其进行变异,并可能使其比原来的更小。非更新版本产生一个新集,使原件保持不变。
Q.,因为difference_update更新集,应该采取什么预防措施来避免从这种方法中收到任何结果?
Python中的A.变异方法通常不返回任何值,以指示它们已对对象进行了变异。唯一的“预防措施”是不将无结果赋值给变量。
就速度而言,Q.,难道set.difference_update不应该更快吗?因为您只是从set s中删除元素,而不是创建像set.difference()这样的新集合?
A.是的,更新版本的算法只是丢弃值。
相反,不更新版本的算法取决于集合的大小。
如果s的大小是t的四倍或更多倍,则新的集版本首先复制主集,然后从其中丢弃值。因此,"s - t被实现为n = s.copy(); n.difference_update(t))。当s比t大得多时,使用该算法。
否则,不更新版本的算法是创建一个空的新集n,循环s的元素,如果它们不存在于t中,则将它们添加到n中。
发布于 2014-12-12 08:02:19
difference_update更新已就位的集合,而不是创建新的集合。
>>> s={1,2,3,4,5}
>>> t={3,5}
>>> s.difference(t)
{1, 2, 4}
>>> s
{1, 2, 3, 4, 5}
>>> s.difference_update(t)
>>> s
{1, 2, 4}https://stackoverflow.com/questions/27439192
复制相似问题