在以下功能中:
def f(value,values):
value = 4
values[0] = 100
t = 1
v = [1,2,3]
f(t,v)
print(t,v[0])
Output: 1, 100
t的值未更改,但v [0]的值已更改。有人可以解释发生了什么吗?
答案 0 :(得分:0)
在python中,赋值意味着将名称绑定到对象。所以
t = 1
v = [1,2,3]
表示将t
绑定到对象整数1
,将v
绑定到对象列表[1,2,3]
。
在函数f(value, values)
中,将新名称value
绑定到相同的整数1
,并将新名称values
绑定到相同的列表[1,2,3]
。现在我们知道了:
-------- -----------
t -> | obj1 | v -> | obj2 |
value -> | 1 | values -> | [1,2,3] |
-------- -----------
然后声明
value = 4
values[0] = 100
表示将名称值重新绑定到对象整数4
(因为整数是不可变类型,因此对象本身无法更改),并且对象[1,2,3]
的第一个元素更改为{ {1}}(列表是可变类型)。
100
因此 -------- -------------
t -> | obj1 | v -> | obj2 |
| 1 | values -> | [100,2,3] |
-------- -------------
--------
value ->| obj3 |
| 4 |
--------
和t
仍绑定到原始对象,但是对象列表v
更改为[1,2,3]
。
答案 1 :(得分:0)
def f(value,values):
value = 4
values[0] = 100
t = 1
v = [1,2,3]
f(t,v)
print(t,v[0])
让我们开始遍历代码,您正在定义函数f:
def f(value,values):
value = 4
values[0] = 100
此函数带有2个参数value
和values
,现在可以移至函数后的代码
t = 1 # here you are declaring a variable name 't' and have value 1
v = [1,2,3] # here we have 'v' having value [1,2,3] which is a list
f(t,v) # here you are calling the function 'f' which is declare above
好吧,现在我们的主要工作开始于当您调用函数'f'f(t,v)
时,当两个参数到达函数t=1
时,两个参数分别具有值v=[1,2,3]
和f(value,values)
我们有value = 1
和values = [1,2,3]
。
在那之后,我们在函数中加入了value=4
,就像之前我们有value = 1
一样,我们的代码将如下所示:
value=4 # previously we have value = 1 so now our code update the value to 4, t does not updated here.
在此之后,我们有了values[0]=100
,因此我们得到的值为[1,2,3],这就像:
values[0]=100 # => [1,2,3][0] = 100 so the array [1,2,3] have 1 on index 0 it will replace 1 in array and now our array becomes [100,2,3]
当我们进行print(t,v[0])
时,我们有t=1
和v[0]=100
,因为我们没有更新函数内部的t值,而仅将array [1,2,3]
的值更新为[100,2,3]