python提高
一、什么是GIL?对线程有什么影响?
- GIL是全局解释器锁,和python没有任何关系,只是由于历史遗留原因难易从Cpython解释器中移除。
- 每个线程在执行时首先要获取GIL,这样保证了同一时间只有一个线程在执行任务,但是遇到IO阻塞时会释放GIL,所以多线程比单线程高效。
- 如果要发挥多核CPU的资源,可以使用多进程。为了避免受GIL的影响可以不使用官方推荐的Cpython解释器,也可以使用其他编程语言来实现多线程。
二、浅拷贝和深拷贝
- 浅拷贝:拷贝最顶层的数据给新的对象,只拷贝了引用
- 深拷贝:拷贝一个对象及其内部的子对象,即对一个对象的深层拷贝,完全拷贝
import copy a = [11, 22] b = [33, 44] c = [a, b] d = copy.copy(c) # 浅拷贝 e = copy.deepcopy(c) # 深拷贝
- 可变类型:浅拷贝只拷贝外层,深拷贝完全拷贝
- 不可变类型:1.只要是外层是不可变类型,浅拷贝不会拷贝,只是指向了同一个内存地址。2.全部是不可变类型,深拷贝也不会拷贝,只是指向了同一个内存地址。3.外层是不可变类型,内层有可变类型,深拷贝会完全拷贝产生新的对象。

浙公网安备 33010602011771号