OhM*_*osh 17 python set python-2.7 python-3.x
当我尝试使用&=和/和两个使用和|=运算符时,我得到了一些奇怪的结果.
s1 = {1,2,3}
s2 = {2,3,4}
tmp = s1
tmp &= s2
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,tmp将是{2,3},但我不知道为什么s1还将其值改为{2,3}.
但是,如果我这样做:
tmp = tmp & s2
Run Code Online (Sandbox Code Playgroud)
然后,s1将保持不变!谁能解释一下&=运营商下面会发生什么?
fal*_*tru 12
&=(set.__iadd__) for set以不同的方式实现&(set.__add).
set &= ...实现使用set.intersection_update其就地更新集合.
相关的CPython代码(Object/setobject.c):
set_iand(PySetObject *so, PyObject *other)
{
PyObject *result;
if (!PyAnySet_Check(other))
Py_RETURN_NOTIMPLEMENTED;
result = set_intersection_update(so, other); // <----
if (result == NULL)
return NULL;
Py_DECREF(result);
Py_INCREF(so);
return (PyObject *)so;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21017 次 |
| 最近记录: |