Python 和 Java 参数传递
Python and Java parameter passing
我在几个地方看到过,包括 Python 文档 Python 使用传递 "assignment" 语义。来自 Java 的背景,说 "Java passes primitives by value, and objects by reference" 的常见错误是由于按值传递对象引用,我不禁想知道 Python 是否真的在做同样的事情。
对我来说,按值传递对象引用和按赋值传递的概念似乎是相同的。 Python 对术语 "pass-by-assignment" 的使用是否是为了减轻出现错误陈述(例如我上面描述的那个)的问题?如果是这样,可以说参数传递在两种语言中的工作方式相似吗?
编辑:我不认为这个问题是重复的。我在这里询问 Python 使用的术语,直接参考 Java 如何做事。另一个问题是关于语言是按值传递还是按引用传递。我知道通过赋值传递是这里使用的术语,但我的论点似乎得到了公认的答案的支持,这与 Java 做事的方式确实没有什么不同;这只是一个不同的名字。
是的Python在这方面似乎等同于Java。来自 http://learnpython.pbworks.com/w/page/15956522/Assignment :
But you must be careful about what is meant by "changes to
parameters". Assigning a new value to a parameter name (inside the
function, a parameter is just a local variable) does not change the
original object--it only rebinds the local variable to a new object.
因此,Python 通过 "object references" "by value"。
我在几个地方看到过,包括 Python 文档 Python 使用传递 "assignment" 语义。来自 Java 的背景,说 "Java passes primitives by value, and objects by reference" 的常见错误是由于按值传递对象引用,我不禁想知道 Python 是否真的在做同样的事情。
对我来说,按值传递对象引用和按赋值传递的概念似乎是相同的。 Python 对术语 "pass-by-assignment" 的使用是否是为了减轻出现错误陈述(例如我上面描述的那个)的问题?如果是这样,可以说参数传递在两种语言中的工作方式相似吗?
编辑:我不认为这个问题是重复的。我在这里询问 Python 使用的术语,直接参考 Java 如何做事。另一个问题是关于语言是按值传递还是按引用传递。我知道通过赋值传递是这里使用的术语,但我的论点似乎得到了公认的答案的支持,这与 Java 做事的方式确实没有什么不同;这只是一个不同的名字。
是的Python在这方面似乎等同于Java。来自 http://learnpython.pbworks.com/w/page/15956522/Assignment :
But you must be careful about what is meant by "changes to parameters". Assigning a new value to a parameter name (inside the function, a parameter is just a local variable) does not change the original object--it only rebinds the local variable to a new object.
因此,Python 通过 "object references" "by value"。