python - 函数内部变量的赋值改变了外部的赋值 - Python
问题描述
我从使用 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)
第一个 print 语句给出[1, 1, 1] [1, 2, 1]
, 而
第二个给出[1, 2, 1] [1, 2, 1]
。
我有一个理解(来自 Matlab),对函数内变量的操作是本地的。但是在这里,如果我不在函数内部复制变量,那么函数外部的值也会发生变化。几乎就像变量被定义为global
.
如果有人可以解释变量在两种方法中的分配方式以及如果想要将变量发送到函数而不影响函数外部的值的最佳实践是什么,那将非常有帮助?谢谢。
解决方案
参数传递是通过赋值完成的。在changes
中,隐含发生的第一件事是
x = a
当您调用时changes(a)
。由于assingment 永远不会复制您 mutate的数据a
。
在keeps
您没有改变参数列表的情况下,因为x[:]
正在创建一个(浅)副本,然后将名称y
分配给该副本。
我强烈建议您观看有关 Python 名称和值的 Facts and Myths。
推荐阅读
- python - 部署到 Azure 时 Flask Dance 超时
- android - Problem with display multiple Toast in order one after another
- unity3d - 二维统一游戏询问我在代码中没有提到的权限
- mariadb - 使用 HAProxy 对 Mariadb 进行负载平衡
- http - Shopify PUT 请求在 OPTIONS 预检时失败并出现 404
- python - 从每个正在运行的 Docker 容器中提取 IP 地址和端口
- shapely - 什么是非简单形状多边形?
- scala - 无法调用主类
- linux - CI Gitlab fails with docker daemon system failure
- java - Spring AOP 不适用于小功能