增强赋值以及共享引用
这种行为通常就是我们所想要的,但注意,这隐含了“+=”对列表是做远处修改的意思。于是,完全不像“+”合并,总是生成新对象。就所有共享引用情况而言,只有其他变量名引用的对象被修改,其差别才可能体现出来:
1
2
3
4
5
6
7
8
9
10 |
>>> L = [ 1 , 2 ] >>> M = L >>> L = L + [ 3 , 4 ] >>> L,M ([ 1 , 2 , 3 , 4 ], [ 1 , 2 ]) >>> L = [ 1 , 2 ] >>> M = L >>> L + = [ 3 , 4 ] >>> L,M ([ 1 , 2 , 3 , 4 ], [ 1 , 2 , 3 , 4 ]) |
这只对于列表和字典这类可变对象才重要,而且是相当罕见的情况。就像往常一样,如果你需要打破共享引用值的结构,就要对可变对象进行拷贝。
命名惯例
类变量名通常以一个大写字母开头,而模块变量名以小写字母开头。
表达式语句和在原处的修改
表达式语句通常用于执行可于原处修改列表的列表方法:
1
2
3
4 |
>>> L = [ 1 , 2 ] >>> L.append( 3 ) >>> L [ 1 , 2 , 3 ] |
然而初学者时常把这种运算写成赋值语句,试着把L赋值给更大的列表:
1
2
3 |
>>> L = L.append( 4 ) >>> print (L) None |
然而,这样做是行不通的。对列表调用append,sort或reverse这类在原处的修改的运算,一定是对列表做原处的修改,但这些方法在修改后并不会把列表返回。事实上,他们返回的是None对象。
原文:http://www.cnblogs.com/hubavyn/p/3687708.html