【发布时间】:2010-11-02 10:17:18
【问题描述】:
Python 文档似乎不清楚参数是按引用传递还是按值传递,以下代码生成未更改的值“Original”
class PassByReference:
def __init__(self):
self.variable = 'Original'
self.change(self.variable)
print(self.variable)
def change(self, var):
var = 'Changed'
我可以做些什么来通过实际引用传递变量吗?
【问题讨论】:
-
有关简短解释/说明,请参阅this stackoverflow question 的第一个答案。由于字符串是不可变的,它们不会被改变并且会创建一个新变量,因此“外部”变量仍然具有相同的值。
-
BlairConrad 答案中的代码很好,但 DavidCournapeau 和 DarenThomas 提供的解释是正确的。
-
在阅读所选答案之前,请考虑阅读此短文Other languages have "variables", Python has "names"。考虑“名称”和“对象”而不是“变量”和“引用”,你应该避免很多类似的问题。
-
另一种解决方法是创建一个包装器“引用”,如下所示: ref = type('', (), {'n':1}) stackoverflow.com/a/1123054/409638
标签: python reference parameter-passing pass-by-reference