深入理解Python中的+=操作

1、在Python中,有一个特性是对于int类型,还有字符串类型的这种固定类型的对象,一旦赋值,就不能改变。

因此,当Python中的int类型变量执行了+=操作,它和我们以前接触的其它语言有所不同。

在前面我们曾经介绍过Python中的对象引用这个概念,根据这个原理,当int 类型变量 a=5,例如当执行a+=2的时候,Python的实际做法是先给a+2的值也就是7存在一块新的内存中去,然后将a这个对象和存放7这个值的这块内存绑定。那么之前的那块内存如果没有被引用,就会被作为垃圾,在垃圾处理机制中被处理掉。

通过上面这个例子,我们发现它和c语言等其它语言有着显著的差别,例如在c语言中,当int 类型变量 a=5,例如当执行a+=2的时候,我们新的值7还是保存在原来的那块内存中。

2、在Python里面,对操作符=和+=做了重载,将其分别用于字符串和列表,+表示连接,+=表示追加字符串并拓展列表:

1)、字符串的例子:

>>>name="John"

>>>name+="Bob"

>>>name

"JohnBob"

>>>name+="Doe"

>>>name

"JohnBobDoe"

2)、列表的例子:

>>>name=["John","Bob"]

>>>name+=["Jaee"]

>>>name

["John","Bob","Jaee"]

3)、一种特殊情况

>>>name=["John","Bob"]

>>>name+="Jaee"

>>>name

大家猜猜此时会输出什么?大家观察下和上面两个例子的区别。

它的正确输出是:

["John","Bob",“j”,"a","e","e"]

那么为什么会出现这样的结果呢?

列表+=操作符右边的操作数必须是一个iterable对象,如果不是就会产生上面的意外。

比如上面的例子,正确的方式应该是添加包含字符串的列表[“jaee"],而不是字符串“jaee”。由于字符串是一个iterable对象,所以在对列表进行+=操作的时候,列表会将字符串“jaee”中的每一个元素,即‘j’,‘a’,‘e’,‘e’分别添加在列表中。



你可能感兴趣的:(Python,Python,原理,=操作,iterable对象)