Python知识点

本文主要记录在学习Python过程中的知识点

序列的增量赋值

+= 背后的特殊方法是iadd(用于“就地加法”),如果一个类没有实现这个方法的话,Python会退一步调用add(得到一个新的对象,然后赋值给变量a)

1
2
a+=b

总体来讲,可变序列一般都实现了iadd方法,因此+=是就地加法。而不可变序列根本不支持这一操作,对这个方法的实现也就无从谈起。

对不可变序列进行重复拼接操作,效率会很低,因为每次都会有一个新的对象,而解释器需要把原对象中的元素先复制到新的对象,然后追加新的元素

关于元组的对象是可变的

1
2
3
t = (1,2,[30,40])
t[2] += [50,60]
  • 不要把可变对象放在元组里面
  • 增量赋值不是一个原子操作,虽然抛出了异常,还是可以完成操作
  • 查看Python的字节码并不难,而且它对我们了解代码背后的运行机制很有帮助

list.sort方法和内置函数sorted

list.sort方法就地排序列表,而不会把原列表复制一份。

sorted会新建一个列表作为返回值