【发布时间】:2009-08-27 18:31:35
【问题描述】:
在 C++ 中,void somefunction(int) 传递一个值,而 void somefunction(int&) 传递一个引用。在 Java 中,原语是按值传递的,而对象是按引用传递的。 python是如何做出这个决定的?
编辑:既然一切都是通过引用传递的,为什么会这样:
def foo(num):
num *= 2
a = 4
foo(a)
print(a)
打印“4”而不是“8”?
【问题讨论】:
-
接受的答案实际上是错误的!查看 newacct 的答案,了解关于按值和按引用之间的区别的一个很好的小讨论
-
我不同意这是错误的。讨论是关于术语的,希望我们说 python 通过引用值传递,而不是说它通过引用传递。即使从教学的角度来看,我也看不出该术语的区别。
-
这是这个问题的副本:stackoverflow.com/questions/986006/… 遗憾的是,对于那个问题,最初接受的答案也是错误的(现在接受的答案很好),就像 Stefanos 的回答一样。
-
@nikow,是的,这是一个更好的描述。
-
伙计们,没有所谓的“通过引用”。在 C 中,当您进行 PBR 时,这意味着您将 指针的值 复制到堆栈中,而不是实际值。您总是按值传递:您传递的值的含义(实际值或指向包含该值的位置的指针)是差异。也就是说,PBR 只是说你正在传递一些引用其他东西的实体的常规语音,因此你不能保证你传递的内容不会被被调用者改变。在这个意义上,python 是 PBR,但是你仅使用可变对象查看它