为什么Python"&="set运算符的作用不同于“set”运算符&="整数运算



为什么此集合操作会更改集合s?对于同一运算符的整数(按位)版本,它的工作方式不同。。。。

设置操作&=(更改s):

s = set('abc')
t = set('bcd')
u=s
print u, s, t
u &= t
print u, s, t

结果:

set(['a', 'c', 'b']) set(['a', 'c', 'b']) set(['c', 'b', 'd'])
set(['c', 'b']) set(['c', 'b']) set(['c', 'b', 'd'])

位操作&=(不更改s):

s = 7
t = 3
u=s
print u, s, t
u &= t
print u, s, t

结果:

7 7 3
3 7 3

Integers实现&运算,但不实现&=运算,因此当您使用x &= y时,它被扩展到x = x & y,CCD_9只是重新分配x变量,而不是修改其内部状态(&突变值没有多大意义,就像+没有意义一样)。蛙类也是如此。

集合实现&=操作,因此它不会扩展为变量重新分配,而是变异运算符的左侧。

元组既不实现&也不实现&=,因此错误是有意义的。然而,+=也会产生同样的效果:对于元组,+=是扩展的,对于列表,这是一种原位突变,因为列表是可变的。

任何类都可以实现它们自己版本的这些运算符。请参阅此处了解详细信息。特别地,CCD_ 18对应于CCD_ 19并且CCD_。

仔细想想,对于可变类来说,实现就地操作符以允许直接修改,但不允许不可变类,这是一个明智的约定。

相关内容

  • 没有找到相关文章

最新更新