【发布时间】:2017-11-29 01:28:55
【问题描述】:
在 python 中编写递归函数时,我注意到一个有趣的现象。 .append 将更改输入变量,但 = 在函数中创建一个私有实例变量。比如使用equals不影响a,
>>> def f(x):
x=x[:-1]
>>> a=[1, 2, 3]
>>> f(a)
>>> a
[1, 2, 3]
在使用追加更改时a.
>>> def g(x):
x.remove(3)
>>> g(a)
>>> a
[1, 2]
>>>
我认为这是因为.remove 编辑了引用,而[:-1] 创建了一个新列表,但发生这种情况有什么原因吗?
【问题讨论】:
-
在 pythontutor.com 上运行它,您将看到参考是如何工作的 - 请参阅可视化中的蓝色箭头。
-
Ned 完美地解释了你需要知道的一切here。
-
已经有答案
https://stackoverflow.com/questions/986006/how-do-i-pass-a-variable-by-reference
标签: python list function reference instance-variables