今天在Stack Over Flow里看到了一个关于'i += x'和'i = i + x'的区别的问题,这里做一个笔记
分析这个问题要分为2种情况:
1.i和x都为List
我们直接用一些实验来分析这个问题
l1 = range(3)
l2 = l1
l2 += [4]
print l1, l2, id(l1)==id(l2)
#[1,2,3,4] [1,2,3,4] True
l2 = l2 + [5]
print l1, l2, id(l1)==id(l2)
#[1,2,3,4] [1,2,3,4,5] False
上面这段代码运行之后,就能发现他们的区别了,'i = i + x'创建了一个新的i对象,而'i += x'则是在原来的i对象上进行操作
PS. id(l1) == id(l2)为True说明对象l1和l2是同一个对象
2.i和x都为Integer
那么Integer对象是否也有这样的现象呢?试一试就知道了!
a1 = 1
a2 = a1
a2 += 2
print a1, a2, id(a1)==id(a2)
#1 3 False
a2 = a1
a2 = a2 + 2
print a1, a2, id(a1)==id(a2)
#1 3 False
同样运行这段代码,可以发现当对象为Integer的时候'+='也会创建一个新的i对象
等我知道原理以后会回来更新的!就酱。。。