我将值 i 传递给 th = threading.Thread(target=func, args=(i,))
并通过 th.start()< 立即启动线程
。
因为这是在索引 i 发生变化的循环内执行的,所以我想知道线程内的 i 是否保留了线程创建时的值,或者线程是否正在处理 i 的引用。在后一种情况下,该值不一定与创建时的值相同。
值是按引用传递还是按值传递?
最佳答案
I would say, passing mutable objects to functions is calling by reference.
您并不是唯一一个这么想的人,但这种想法限制了您与他人交流 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:threading.Thread,值是按值传递还是按引用传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53081697/