每天进步一点之灵魂拷问12之你不知道的py

本文介绍了Python的数据结构,如列表、元组和字典,以及其作为脚本语言的特点。详细阐述了Python2.x与3.x的主要差异,包括语法和内置函数的变化。探讨了Python的面向对象编程,说明了类的访问控制没有严格区分。深入讨论了Python列表的底层实现为overallocatedarray,以及生成器和迭代器的概念和用法。此外,文章还分析了Python的内存管理和垃圾回收机制,特别是引用计数和GIL(全局解释器锁)对多线程的影响。最后,提到了Python中的装饰器、深拷贝与浅拷贝、双等于和is的区别等核心概念。

#1
python有哪几种数据结构?

#2
python是脚本语言么?

#3
python2.x和python3.x有哪些差别?随便讲讲

#4
python的类有public, private, protected之分么?

无。全靠自己自觉。

#5
python列表list的底层实现方式是?

over allocated array

#6
什么是Python生成器?

有哪几种存在方式?
1.函数中有yield的
2.(i for i in range(10001))

#7
什么是Python迭代器?

简而言之:
迭代器就是 iter(容器),使得可以用next遍历,直到StopIteration。

迭代器是有限的集合,而生成器可以是无限的集合。

#8
list和tuple有什么区别?

动静之分
可变与不可变之分

#9
Python中的list和dict是怎么实现的?

dict是哈希实现
list是array实现

#10
Python中使用多线程可以达到多核CPU一起使用吗?

cpython有全局解释锁,GIL。
python通过 引用 计数 来管理内存。每一次创建或者引用都会计数+1,如果引用计数=0,则自动释放内存。

#11
为什么引入GIL?

1.设计者为了规避类似于内存管理的复杂竞争问题。
2. cpython大量使用c语言库,但是大部分的c语言都不是原生线程安全。(线程安全会降低性能和增加复杂度)

#12
GIL怎么工作?

每个线程(程序员)开始工作时候,会锁住GIL(类比电脑)。阻止别的进程执行;
工作了一会儿,需要休息,就主动释放GIL,让别人用。
那,一会儿是多久?
一会儿就是python里有计时器,check_interval,轮巡察看GIL的是否锁住情况。一般是15ms,休息一次。
实际上,虽然只允许同时一个人用电脑,但是还是需要休息的抢占机制,也就是还是需要自己对临界的资源加锁。这是另外一个话题了。

#13
那如何绕过GIL?

如果你实在看不下去,那就用其他的语言实现的解释器呗,比如Jpython(java实现的)。
或者呢,把关键性的代码,放到比如C++中实现,别用py了。。。。

#14
什么是装饰器?

#15
Python如何进行内存管理?

如上述,引用计数呗。就这样?计数=0时候回收?
诶,不对,思考一下,如果循环引用或者引用环呢?

有算法:标记清除图算法,分代算法。

#16
Python中的垃圾回收机制?

py一般自动回收。如果咱们非要手动,就先del a来删除引用;然后gc.collec()

#17
•什么是lambda表达式?

#18
•什么是深拷贝和浅拷贝?

#19
•双等于和is有什么区别?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万物琴弦光锥之外

给个0.1,恭喜老板发财

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值