我绝对是Python的新手,我对此简单的代码段存在以下疑问:
mMap = findViewById(R.id.googleMap)
如您所见,我正在定义以列表为参数的 myFunction()函数。它更改了传递列表的值。但是由于参数是通过值而不是通过引用传递的,因此在此函数的范围之外无效。实际上,在函数调用后打印 print(myList1)值时,我仍然获得原始值。这很清楚。
我的怀疑与 myFunction2()函数的行为有关,该函数接受一个列表,但对其进行更改会删除一个项目。
在这种情况下,当我在 myFunction2()调用之后打印 myList2 列表的内容时,我得到了原始列表已被函数修改了吗?
为什么?我想念什么?
答案 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
。