对Python函数范围的一些怀疑

时间:2019-12-21 11:28:41

标签: python python-3.x

我绝对是Python的新手,我对此简单的代码段存在以下疑问:

mMap = findViewById(R.id.googleMap)

如您所见,我正在定义以列表为参数的 myFunction()函数。它更改了传递列表的值。但是由于参数是通过值而不是通过引用传递的,因此在此函数的范围之外无效。实际上,在函数调用后打印 print(myList1)值时,我仍然获得原始值。这很清楚。

我的怀疑与 myFunction2()函数的行为有关,该函数接受一个列表,但对其进行更改会删除一个项目。

在这种情况下,当我在 myFunction2()调用之后打印 myList2 列表的内容时,我得到了原始列表已被函数修改了吗?

为什么?我想念什么?

3 个答案:

答案 0 :(得分:2)

请注意,在两种情况下,您都是通过引用传递它的,但是在第一个函数中,您更改了“指针”及其值,myList1 = [0, 1]不会影响原始列表,因为您更改了指针myList1变成[0,1],然后在function2上更改列表本身内的内容,然后访问列表myList1[0]

中的值

与操作相同:

def f(l):
    l[0] = 2 # will change the list
    l = [1,2,3] # will change l in this scope to be equals to [1,2,3]

元论坛

让我们说您有一个盒子,它叫l,然后您将盒子传递给某人,可以说他叫功能先生,他可以对盒子做任何他想做的事情,更改盒子的值( l[0] = 2),这将更改盒子的内容,但他也可以替换盒子本身(l = [1,2,3]),这不会影响您的盒子,请注意更改我的盒子的内容与替换它。

答案 1 :(得分:2)

在Python中,lists作为reference传递。 如果在方法中重新分配标签,它将仅影响本地范围,这是您已经知道的。 另外,由于lists可变的,因此,如果您不尝试创建新的list 对象,而是修改现有的对象,它将可以按预期方式运行,即将引用修改为list

答案 2 :(得分:0)

通过引用作为参数传递的集合。

调用myFunction时,局部变量(指针)myList1与全局myList1指代相同的存储区。

如果您更改一个-更改另一个。

但是在myList1 = [0, 1]本地myList1引用了list的另一个实例之后,对其进行更改不会影响全局myList1