Python中的数据结构分为可变(mutable)和不可变(immutable):
可变类型,值可以改变:
• 列表 list
• 字典 dict
不可变类型,值不可以改变:
• 数值类型 int, long, bool, float
• 字符串 str
• 元组 tuple
对于可变类型,=和+=有着明显的不同,如list:
+表示连接操作,+=表示追加
对于不可变类型,=和+=就是一样的操作,如上面的tuple
可变类型与不可变类型的本质在于内存空间是否可变~
更具体的说就是:
a=a+b是先创建一个新的对象并让变量a引用这个对象,a+=b是让a所引用的对象的值变成a+b的值。
+= 是 + 的一种升级版本, 具有能把执行后的结果再写回传递来的变量本身的功能, 可变变量自身有比不可变变量多一个魔法方法 _iadd_, += 操作调用 _iadd_方法,没有该方法时,再尝试调用_add_方法, 不可变变量没有_iadd_方法
例子:
def selfAdd(a):
a = a + a
# a += a #这两句话是不同的,在函数里面。
def selfAdd1(a):
a += a
a_list = [1, 2]
selfAdd(a_list)
print(a_list)
b_list = [1, 2]
selfAdd1(b_list)
print(b_list)
输出结果:
import dis
print(dis.dis(selfAdd))
#输出结果:
0 LOAD_FAST 0 (a)
3 LOAD_FAST 0 (a)
6 BINARY_ADD #区别在这里
7 STORE_FAST 0 (a)
10 LOAD_CONST 1 (None)
13 RETURN_VALUE
None
print(dis.dis(selfAdd1))
#输出结果:
0 LOAD_FAST 0 (a)
3 LOAD_FAST 0 (a)
6 INPLACE_ADD #原地加
7 STORE_FAST 0 (a)
10 LOAD_CONST 1 (None)
13 RETURN_VALUE
None
参考:
https://segmentfault.com/q/1010000009754631?sort=created
http://blog.csdn.net/xinxinNoGiveUp/article/details/78442200
网友评论