python - Python:threading.Thread,值是按值传递还是按引用传递?
问题描述
我将值 i 传递给th = threading.Thread(target=func, args=(i,))
并立即启动线程th.start()
。因为这是在更改索引 i 的循环内执行的,所以我想知道线程内的 i 是否从线程创建时保留其值,或者线程是否正在处理 i 的引用。在后一种情况下,该值不一定与创建 th 时的值相同。值是通过引用还是值传递?
解决方案
我想说,将可变对象传递给函数是通过引用调用。
你不是唯一一个想这么说的人,但是这样想会限制你与他人交流 Python 程序实际工作方式的能力。
考虑以下 Python 片段:
a = [1, 2, 3]
b = a
foobar(a)
if not b is a:
print('Impossible!')
如果 Python 是一种“按引用传递”的编程语言,那么foobar(a)
调用可能会导致该程序Impossible!
通过更改局部变量a
来引用某个不同的对象来打印。
但是,Python 不做引用传递。它只传递值,这意味着没有定义foobar
可以使片段执行print
调用。该foobar
函数可以改变局部变量所a
引用的对象,但它没有修改a
自身的能力。
推荐阅读
- python - 如何忽略字符串中的特定字符,然后再使用它?
- php - 如何从 laravel 中的文件服务器使用临时 url 下载
- bash - 再次期待相同的角色
- python - statsmodels:在多个时间序列上拟合聚合 SARIMAX
- c# - .NET CORE 2.2 身份 + WebAPI 的基本身份验证
- python - PyCharm 无法安装 Pyautogui
- javascript - ng new firstapp in angular8
- python - 图像在烧瓶应用程序中无法正确显示
- python - RuntimeError,在 IA 上工作 tryna 使用预训练的 BERT 模型
- sql-server - 计算出多次出现的两行之间的时间差