【随笔】关于局部变量的一点小发现

在研究多线程时,作者发现队列在多线程中的线程安全性引发了一个关于局部变量的问题。原本预期队列的改变仅限于函数内部,但实际情况并非如此。通过实验,作者排除了底层实现特殊情况的可能性,认为`put`和`get`操作不被视为修改值。同时,`append`操作也显示出类似的效果,其ID未发生变化,进一步证实了这一观点。此外,作者还探讨了函数参数传递时,未修改的变量在函数内外保持一致,而修改后的变量则成为局部作用域内的新对象。
摘要由CSDN通过智能技术生成

最近在研究多线程的时候,发现了一个队列

from queue import Queue

这个队列在多线程中是属于线程安全,但是使用过程中发现了这样的一个问题,那就是

from queue import Queue

def fun(que):
    que.put(1)


def main():
    q = Queue(3)
    print(q.empty())
    fun(q)
    print(q.get())

if __name__ == '__main__':
    main()

输出结果为:
在这里插入图片描述
这也就说明q队列一开始是空的,但是在fun函数却增加了一个值,感觉这就和我之前所理解局部变量不一样了,按理说fun中的改变应该是不影响main中的值才对。

def fun(b):
    b = 9
    print("在fun中a的值为"+str(b))


def main():
    a = 3
    print("在修改前a的值为"+str(a))
    fun(a)
    print("在修改后a的值为"+str(a))

if __name__ == '__main__':
    main()

按照我之前的理解,局部变量应该是这样的东西才对

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值