首页 > 解决方案 > 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列表的内容时,我得到原始列表已被函数修改?

为什么?我错过了什么?

标签: pythonpython-3.x

解决方案


在 Pythonlists中,以reference. 如果您在方法内重新分配标签,它只会影响本地范围,这是您已经知道的。此外,因为是mutable,如果您不尝试创建新对象,而是修改现有对象,它将按预期执行,即修改.listslist list


推荐阅读