python - Python函数作用域的一些疑惑
问题描述
我在 Python 中绝对是新手,我对这个简单的代码片段有以下疑问:
def myFunction(myList1):
print(myList1)
myList1 = [0, 1]
def myFunction2(myList1):
print(myList1)
del myList1[0]
myList1 = [2, 3]
myFunction(myList1)
print(myList1)
myList2 = [2, 3]
myFunction2(myList2)
print(myList2)
如您所见,我正在定义以列表为参数的myFunction()函数。它改变了传递列表的值。但是由于参数是按值而不是按引用传递的,因此在此函数范围之外没有任何影响。事实上,当我在函数调用后打印 print(myList1)值时,我仍然获得原始值。这很清楚。
我的疑问与myFunction2()函数的行为有关,该函数采用列表但将其更改为删除项目。
在这种情况下,当我在myFunction2()调用之后打印myList2列表的内容时,我得到原始列表已被函数修改?
为什么?我错过了什么?
解决方案
在 Pythonlists
中,以reference
. 如果您在方法内重新分配标签,它只会影响本地范围,这是您已经知道的。此外,因为是mutable,如果您不尝试创建新对象,而是修改现有对象,它将按预期执行,即修改对.lists
list
list
推荐阅读
- django - 在 Django 中处理重复的引导模式
- web-component - 我应该如何将 Web 组件添加到页面?
- php - PHP shell_exec:PHP 总是等待完成
- node.js - 如何从 s3 存储桶中的 tar.gz 读取文件
- javascript - d3 - 如何在月度图表上仅添加年份的 x 轴标签?
- php - PHP 正则表达式排除
- iphone - 创建 Siri 快捷方式以显示照片的经纬度
- docker - 有没有办法使用 github 操作插件 docker/build-push-action@v1 设置 docker build 的路径
- swift - PyTorch 到 CoreMl 的转换模型导致 RAM 使用量激增
- python-3.x - 由于内存不足,带有多线程的 Python 脚本被杀死