s.difference(t) 返回 t 中没有元素的新集合。
s.difference_update(t) 返回 t 中没有元素的更新集。
这两个set方法有什么区别? 因为 difference_update 更新了 set ,应该采取什么预防措施来避免从这个方法接收到 None 的结果?
就速度而言,set.difference_update 不应该更快吗,因为您只是从 set 中删除元素而不是像 set.difference() 那样创建新的集合?
最佳答案
问。这两种设置方法有什么区别?
A. 更新 版本从现有集合中减去、改变它,并有可能使其比原来更小。 非更新 版本生成一个新集,保持原始不变。
问。因为 difference_update 更新了 set,应该采取什么预防措施来避免从这个方法接收到 None 的结果?
A. Python 中的变异方法通常返回 None 以表明它们已经变异了一个对象。唯一的“预防措施”是不要将 None 结果分配给变量。
问。就速度而言,set.difference_update 不应该更快,因为您只是从 set 中删除元素而不是像 set.difference() 那样创建新的集合?
A. 是的,更新 版本的算法只是丢弃值。
相比之下,非更新版本的算法取决于集合的大小。
如果 s 的大小是 t 的四倍或更多倍,则新集版本首先复制主集,然后丢弃其中的值。所以 "s - t
被实现为 n = s.copy(); n.difference_update(t)
)。当 s 比 t
否则,非更新版本的算法是创建一个空的新集合n,遍历s的元素并将它们添加到n 如果它们不存在于 t 中。
关于Python:set.difference 和 set.difference_update 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27439192/