tem*_*ame 16 python set set-operations
Python集具有以下方法:
s.union(t) s | t new set with elements from both s and t
s.update(t) s |= t return set s with elements added from t
Run Code Online (Sandbox Code Playgroud)
同样,还有这些:
s.intersection_update(t) s &= t return set s keeping only elements also found in t
s.intersection(t) s & t new set with elements common to s and t
Run Code Online (Sandbox Code Playgroud)
等等,适用于所有标准关系代数运算.
所以......问题是,这里究竟有什么区别?我看到它说update()版本返回s而不是新集,但如果我写x = s.update(t),这是否意味着id(x) == id(s)?他们现在引用同一个对象吗?
我的意思是,我真的不明白为什么要实现这两套方法.它似乎没有添加任何重要的功能.
Mar*_*ers 30
他们是非常不同的.一组更改设置到位,而其他离开原设定独自一人,并返回一个副本代替.
>>> s = {1, 2, 3}
>>> news = s | {4}
>>> s
set([1, 2, 3])
>>> news
set([1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)
注意如何s保持不变.
>>> s.update({4})
>>> s
set([1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)
现在我改变了s自己.还要注意,.update()似乎没有返回任何东西; 它没有返回s调用者,Python解释器没有回显值.
在原地更改对象的方法永远不会在Python中返回原始对象.它们的返回值总是None相反(永远不会回显).