Python: What's the difference between set.difference and set.difference_update?

丶灬走出姿态 提交于 2019-12-18 08:30:36

问题


s.difference(t) returns a new set with no elements in t.

s.difference_update(t) returns an updated set with no elements in t.

What's the difference between these two set methods? Because the difference_update updates set s, what precautions should be taken to avoid receiving a result of None from this method?

In terms of speed, shouldn't set.difference_update be faster since you're only removing elements from set s instead of creating a new set like in set.difference()?


回答1:


Q. What's the difference between these two set methods?

A. The update version subtracts from an existing set, mutating it, and potentially leaving it smaller than it originally was. The non-update version produces a new set, leaving the originals unchanged.

Q. Because the difference_update updates set s, what precautions should be taken to avoid receiving a result of None from this method?

A. Mutating methods in Python generally return None as a way to indicate that they have mutated an object. The only "precaution" is to not assign the None result to a variable.

Q. In terms of speed, shouldn't set.difference_update be faster since you're only removing elements from set s instead of creating a new set like in set.difference()?

A. Yes, the algorithm of the update version simply discards values.

In contrast, the algorithm for the non-updating version depends on the size of the sets.

If the size of s is four or more times larger that t, the new set version first copies the main set and then discards values from it. So "s - t is implemented as n = s.copy(); n.difference_update(t)). That algorithm is used when s is much larger than t

Otherwise, the algorithm for the non-updating version is to create an empty new set n, loop over the elements of s and add them to n if they are not present in t.




回答2:


difference_update updates a set in-place rather than return a new one.

>>> 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/python-whats-the-difference-between-set-difference-and-set-difference-update

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!