Python中GIL与多线程是什么关系?

本文探讨了Python中列表self append无限嵌套的原理,装饰器的概念及其在代码抽象简化中的作用。接着解释了GIL如何与Python多线程相互作用,说明了Python多线程的“伪并行”本质。最后,讨论了多进程与多线程在CPU密集型和I/O密集型任务中的应用场景选择。
摘要由CSDN通过智能技术生成

问题一:列表 self append 无限嵌套的原理

在这里插入图片描述
先来回答第一个问题,两个同学都问到了,下面这段代码中的 x,为什么是无限嵌套的列表?


x = [1]
x.append(x)
x
[1, [...]]

我们可以将上述操作画一个图,便于你更直观地理解:
在这里插入图片描述
这里,x 指向一个列表,列表的第一个元素为 1;执行了 append 操作后,第二个元素又反过来指向 x,即指向了 x 所指向的列表,因此形成了一个无限嵌套的循环:[1, [1, [1, [1, …]]]]。

不过,虽然 x 是无限嵌套的列表,但 x.append(x) 的操作,并不会递归遍历其中的每一个元素。它只是扩充了原列表的第二个元素,并将其指向 x,因此不会出现 stack overflow 的问题,自然不会报错。

至于第二点,为什么 len(x) 返回的是 2?我们还是来看 x,虽然它是无限嵌套的列表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值