Python 疑难点一: GIL 和 深拷贝/浅拷贝

GIL  (全局解释器锁)

    一般面试题:

           描述Python GIL的概念, 以及它对python多线程的影响

    参考答案:

        1. GIL  跟Python 语言没有任何关系 , 而仅仅只是跟cpython 解释器有关, 由于历史原因,很久之前的cpu 仅仅只供单线程使用,而如今多cpu 多线程 多任务为主,难以移除GIL;

        2.GIL 的意思 就是全局解释器锁 ()global interpreter lock) , 每个线程在执行的时候需要先获取GIL, 保证同一时刻只有一个线程在执行代码

        3. 线程释放GIL 锁的情况: 在IO 操作等可能会引起阻塞的system call之前, 可以暂时释放GIL,但在执行完毕之后,必须重新获取GIL

        4.对于计算密集型用多进程,多IO密集型用多线程

        5.Python 使用多进程是可以利用多核CPU资源的 ; 多线程爬虫比单线程性能有所提高, 因为遇到IO阻塞的时候会自动释放GIL锁


深拷贝 / 浅拷贝

        1. 浅拷贝 ----- copy.copy()

        浅拷贝是对一个对象的顶层拷贝; 通俗意思就是说 : 只拷贝了引用, 没有拷贝内容,内容仍然是原引用



    2.深拷贝----copy.deepcopy()

        深拷贝是对一个对象所有层次的拷贝(递归)


    3. 拷贝的其他方式

            分片表达式 可以赋值一个序列

            字典的copy方法可以拷贝一个字典




    4.注意点:

        [1] 用copy(), deepcopy() 对一个全部都是不可变类型数据进行拷贝,那么结果相同, 都是引用指向

        [2]如果 拥有可变数据,即使元祖是最顶层,deepcopy 依旧是深拷贝 ,copy 还是引用指向

        [3] 对可变类型来说, 浅拷贝和深拷贝 都会改变重新拷贝一份数据,但是浅拷贝不会改变列表里可变类型的元

            素的id, 但深拷贝就会改变可变类型的元素id



      


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值