函数内部变量的赋值会改变外部的赋值 - Python

2024-05-22

我从使用 Matlab 转向使用 Python,使用函数时的变量赋值让我感到困惑。

我有一个代码如下:

a = [1,1,1]

def keeps(x):
    y = x[:]
    y[1] = 2
    return y

def changes(x):
    y = x
    y[1] = 2
    return y

aout = keeps(a)
print(a, aout)

aout = changes(a)
print(a, aout)

第一个打印语句给出[1, 1, 1] [1, 2, 1], while

第二个给出[1, 2, 1] [1, 2, 1].

我有一个理解(来自 Matlab):函数内变量的操作是局部的。但在这里,如果我不在函数内部复制变量,则函数外部的值也会发生变化。几乎就像变量被定义为global.

如果有人可以解释变量在这两种方法中如何进行不同的分配,以及如果想将变量发送到函数而不影响函数外的值,最佳实践是什么,这将非常有帮助?谢谢。


参数传递是通过赋值完成的。在changes,隐式发生的第一件事是
x = a你打电话时changes(a). Since 赋值从不复制数据你变异了a.

In keeps你没有改变参数列表,因为x[:]正在创建一个(浅)副本,其名称为y被分配给.

我强烈推荐观看关于 Python 名称和值的事实和神话 https://www.youtube.com/watch?v=_AEJHKGk9ns.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数内部变量的赋值会改变外部的赋值 - Python 的相关文章

随机推荐